常用Oracle函數使用說明

 
常用Oracle pl/sql 函数使用

数值函数


abs(m)  
m 的绝对值
mod(m,n)
m n 除后的余数
power(m,n)
m n 次方
round(m[,n])
m 四舍五入至小数点后 n 位的值( n 缺省为 0
trunc(m[,n])
m 截断 n 位小数位的值( n 缺省为 0


字符函数

initcap(st)
返回 st 将每个单词的首字母大写,所有其他字母小写
lower(st)
返回 st 将每个单词的字母全部小写
upper(st)
返回 st 将每个单词的字母全部大写
concat(st1,st2)  
返回 st st2 st1 的末尾(可用操作符 "||"
lpad(st1,n[,st2])
返回右对齐的 st,st 为在 st1 的左边用 st2 填充直至长度为 n,st2 的缺省为空格
rpad(st1,n[,st2])
返回左对齐的 st,st 为在 st1 的右边用 st2 填充直至长度为 n,st2 的缺省为空格
ltrim(st[,set])  
返回 st,st 为从左边删除 set 中字符直到第一个不是 set 中的字符。缺省时,指的是空格
rtrim(st[,set])  
返回 st,st 为从右边删除 set 中字符直到第一个不是 set 中的字符。缺省时,指的是空格
replace
(st,search_st[,replace_st]) 将每次在 st 中出现的 search_st replace_st 替换,返回一个 st 。缺省时,删除 search_st
substr(st,m[,n])
n= 返回 st 串的子串,从 m 位置开始,取 n 个字符长。缺省时,一直返回到 st 末端
length(st)
数值,返回 st 中的字符数
instr(st1,st2[,m[,n]]) 
数值,返回 st1 从第 m 字符开始, st2 n 次出现的位置, m n 的缺省值为 1
例:
1.
select initcap('THOMAS'),initcap('thomas') from test;
initca initca
------ ------
Thomas Thomas
2.
select concat('abc','def') "first" from test;
first
-----
abcdef
3.
select 'abc'||' '||'def' "first" from test;
first
-----
abc def
4.
select lpad(name,10),rpad(name,5,'*') from test;
lpad(name,10) rpad(name,5,'*')
------------ ----------------
         mmx mmx**
      abcdef abcde
5.
去掉地址字段末端的点及单词 st rd
select rtrim(address,'. st rd') from test
6.
select name,replace(name,'a','*') from test;
name  replace(name,'a','*')
----  ---------------------
great gre*t
7.
select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;
a         b
-------   -------
bald bear bearisol
8.
select name,instr(name,' ') a,instr(name,' ',1,2) b from test;
name    a        b
------- -------- ---------
li lei  3        0
l i l   2        4



转换函数

nvl(m,n)
如果 m 值为 null, 返回 n, 否则返回 m
to_char(m[,fmt])
 m 从一个数值转换为指定格式的字符串 fmt 缺省时, fmt 值的宽度正好能容纳所有的有效数字
to_number(st[,fmt])
st 从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数
 
 
附:
to_char()
函数的格式:
---------------------------------
符号     说明
---------------------------------
9      
每个 9 代表结果中的一位数字
0      
代表要显示的先导 0
$      
美元符号打印在数的左边
L      
任意的当地货币符号
.      
打印十进制的小数点
,      
打印代表千分位的逗号
---------------------------------
例:
1.
select to_number('123.45')+to_number('234.56') form test;
to_number('123.45')+to_number('234.56')
----------------------------------------
                               358.01
2.
select to_char(987654321) from test;
to_char(987654321)
------------------
987654321
3.
select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test;
a       b          c
------- ---------- -----------
$123    $54,321    $9,874,321
4.
select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to_char(1.1,'999,999.999') from test;
a         b          c
--------- ---------- ------------
1,234.123 .457       1.100


分组函数

avg([distinct/all] n)
n 的平均值
count([all] *)
返回查询范围内的行数包括重复值和空值
count([distinct/all] n)
非空值的行数
max([distinct/all] n)
该列或表达式的最大值
min([distinct/all] n)
该列或表达式的最小值
stdev([distinct/all] n)
该列或表达式的标准偏差,忽略空值
sum([distinct/all] n)
该列或表达式的总和
variance([distinct/all] n)
该列或表达式的方差,忽略空值


日期函数

add_months(d,n)
日期 d n 个月
last_day(d)
包含 d 的月份的最后一天的日期
month_between(d,e)
日期 d e 之间的月份数, e 先于 d
new_time(d,a,b)
a 时区的日期和时间 d b 时区的日期和时间
next_day(d,day)
比日期 d 晚,由 day 指定的周几的日期
sysdate
当前的系统日期和时间
greatest(d1,d2,...dn)
给出的日期列表中最后的日期
least(d1,k2,...dn)
给出的日期列表中最早的日期
to_char(d [,fmt])
日期 d fmt 指定的格式转变成字符串
to_date(st [,fmt])
字符串 st fmt 指定的格式转成日期值,若 fmt 忽略, st 要用缺省格式
round(d [,fmt])
日期 d fmt 指定格式舍入到最近的日期
trunc(d [,fmt])
日期 d fmt 指定格式截断到最近的日期

附:
日期格式:
--------------------------------
格式代码   说明                举例或可取值的范围
--------------------------------
DD         
该月某一天              1 31
DY         
三个大写字母表示的周几  SUN ...SAT
DAY       
完整的周几,大写英文      SUNDAY ...SATURDAY
MM         
月份                1 12
MON       
三个大写字母表示的月份 JAN ...DEC
MONTH   
完整月份          JANUARY,...DECEMBER
RM         
月份的罗马数字        I,...XII
YY
YYYY     两位,四位数字年
HH:MI:SS
时:分:秒
HH12
HH24   以 12 小时或 24 小时显示
MI          

SS          

AM
PM 上下午指示符
SP          
后缀 SP 要求拼写出任何数值字段
TH         
后缀 TH 表示添加的数字是序数  4th,1st
FM         
前缀对月或日或年值,禁止填充
---------------------------------
例:
1.
下一个周五的日期
select next_day(sysdate,6) from test;
2.
两个月前的今天的日期
select add_months(sysdate,-2) from test;
204. 如何得到字符串的第一個字符的 ASCII ?
ASCII(CHAR)
SELECT ASCII('ABCDE') FROM DUAL;
結果 : 65

205.
如何得到數值 N 指定的字符 ?
CHR(N)
SELECT CHR(68) FROM DUAL;
結果 : D

206.
如何連接兩個字符串 ?
CONCAT(CHAR1,CHAR2)
SELECT CONCAT('ABC','DEFGH') FROM DUAL;
結果 : 'ABCDEFGH'

207.
如何將列中的數值代替為字符串 ?
DECODE(CHAR,N1,CHAR1,N2,CHAR2...)
SELECT DECODE(DAY,1,'SUN',2,'MON') FROM DUAL;

208. INITCAP(CHAR)
將字符串 CHAR 的第一個字符為大寫 , 其余為小寫 .
SELECT INITCAP('ABCDE') FROM DUAL;

209. LENGTH(CHAR)
取一字符串 CHAR 的長度 .
SELECT LENGTH('ABCDE') FROM DUAL;

210. LOWER(CHAR)
將字符串 CHAR 全部變為小寫 .
SELECT LOWER('ABCDE') FROM DUAL;

211. LPAD(CHAR1,N,CHAR2)
用字符串 CHAR2 包括的字符左填 CHAR1, 使其長度為 N.
SELECT LPAD('ABCDEFG',10'123') FROM DUAL;
結果 : '123ABCDEFG'

212. LTRIM(CHAR,SET)
從字符串 CHAR 的左邊移去字符串 SET 中的字符 , 直到第一個不是 SET 中的字符為止 .
SELECT ('CDEFG','CD') FROM DUAL;
結果 : 'EFG'

213. NLS_INITCAP(CHAR)
取字符 CHAR 的第一個字符大寫 , 其余字符為小寫 .
SELECT NLS_INITCAP('ABCDE') FROM DUAL;

214. NLS_LOWER(CHAR)
將字符串 CHAR 包括的字符全部小寫 .
SELECT NLS_LOWER('AAAA') FROM DUAL;

215. NLS_UPPER(CHAR)
將字符串 CHAR 包括的字符全部大寫 .
SELECT NLS_UPPER('AAAA') FROM DUAL;

216. REPLACE(CHAR1,CHAR2,CHAR3)
用字符串 CHAR3 代替每一個列值為 CHAR2 的列 , 其結果放在 CHAR1 .
SELECT REPLACE(EMP_NO,'123','456') FROM DUAL;

217. RPAD(CHAR1,N,CHAR2)
用字符串 CHAR2 右填字符串 CHAR1, 使其長度為 N.
SELECT RPAD('234',8,'0') FROM DUAL;

218. RTRIM(CHAR,SET)
移去字符串 CHAR 右邊的字符串 SET 中的字符 , 直到最后一個不是 SET 中的字符為止 .
SELECT RTRIM('ABCDE','DE') FROM DUAL;

219. SUBSTR(CHAR,M,N)
得到字符串 CHAR M 處開始的 N 個字符 . 雙字節字符 , 一個漢字為一個字符的 .
SELECT SUBSTR('ABCDE',2,3) FROM DUAL;

220. SUBSTRB(CHAR,M,N)
得到字符串 CHAR M 處開始的 N 個字符 . 雙字節字符 , 一個漢字為二個字符的 .
SELECT SUBSTRB('ABCDE',2,3) FROM DUAL;

221. TRANSLATE(CHAR1,CHAR2,CHAR3)
CHAR1 中的 CHAR2 的部分用 CHAR3 代替 .
SELECT TRANSLATE('ABCDEFGH','DE','MN') FROM DUAL;

222. UPPER(CHAR)
將字符串 CHAR 全部為大寫 .

223. ADD_MONTHS(D,N)
N 個月增加到 D 日期 .
SELECT ADD_MONTHS(SYSDATE,5) FROM DUAL;

224. LAST_DAY(D)
得到包含 D 日期的月份的最后的一天的日期 .
SELECT LAST_DAY(SYSDATE) FROM DUAL;

225. MONTH_BETWEEN(D1,D2)
得到兩個日期之間的月數 .
SELECT MONTH_BETWEEN(D1,D2) FROM DUAL;

226. NEXT_DAY(D,CHAR)
得到比日期 D 晚的由 CHAR 命名的第一個周日的日期 .
SELECT NEXT_DAY(TO_DATE('2003/09/20'),'SATDAY') FROM DUAL;

227. ROUNT(D,FMT)
得到按指定的模式 FMT 舍入到的最進的日期 .
SELECT ROUNT('2003/09/20',MONTH) FROM DUAL;

228. SYSDATE
得到當前系統的日期和時間 .
SELECT SYSDATE FROM DUAL;

229. TO_CHAR(D,FMT)
將日期 D 轉換為 FMT 的字符串 .
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') FROM DUAL;

230. TO_DATE(CHAR,FMT)
將字符串 CHAR FMT 的格式轉換為日期 .
SELECT TO_DATE('2003/09/20','YYYY/MM/DD') FROM DUAL;

231. ABS(N)
得到 N 的絕對值 .
SELECT ABS(-6) FROM DUAL;

232. CEIL(N)
得到大于或等于 N 的最大整數 .
SELECT CEIL(5.6) FROM DUAL;

233. COS(N)
得到 N 的余弦值 .
SELECT COS(1) FROM DUAL;

234. SIN(N)
得到 N 的正弦值 .
SELECT SIN(1) FROM DUAL;

235. COSH(N)
得到 N 的雙曲余弦值 .
SELECT COSH(1) FROM DUAL;

236. EXP(N)
得到 N E N 次冪 .
SELECT EXP(1) FROM DUAL;

237. FLOOR(N)
得到小于或等于 N 的最小整數 .
SELECT FLOOR(5.6) FROM DUAL;

238. LN(N)
得到 N 的自然對數 .
SELECT LN(1) FROM DUAL;

239. LOG(M,N)
得到以 M 為底 N 的對數 .
SELECT LOG(2,8) FROM DUAL;

240. MOD(M,N)
得到 M 除以 N 的余數 .
SELECT MOD(100,7) FROM DUAL;

241. POWER(M,N)
得到 M N .
SELECT POWER(4,3) FROM DUAL;

242. ROUND(N,M)
N 舍入到小數點后 M .
SELECT (78.87653,2) FROM DUAL;

243. SIGN(N)
N<0 , 得到 -1;
N>0 , 得到 1;
N=0 , 得到 0;
SELECT SIGN(99) FROM DUAL;

244. SINH(N)
得到 N 的雙曲正弦值 .
SELECT SINH(1) FROM DUAL;

245. SORT(N)
得到 N 的平方根 ,N>=0
SELECT SORT(9) FROM DUAL;

246. TAN(N)
得到 N 的正切值 .
SELECT TAN(0) FROM DUAL;

247. TANH(N)
得到 N 的雙曲正切值 .
SELECT TANH(0) FROM DUAL;

248. TRUNC(N,M)
得到在 M 位截斷的 N 的值 .
SELECT TRUNC(7.7788,2) FROM DUAL;

249. COUNT()
計算滿足條件的記錄數 .
SELECT COUNT(*) FROM TABLE1 WHERE COL1='AAA';

250. MAX()
對指定的列求最大值 .
SELECT MAX(COL1) FROM TABLE1;

251. MIN()
對指定的列求最小值 .
SELECT MIN(COL1) FROM TABLE1;

252. AVG()
對指定的列求平均值 .
SELECT AVG(COL1) FROM TABLE1;

253. SUM()
計算列的和 .
SELECT SUM(COL1) FROM DUAL;

254. TO_NUMBER(CHAR)
將字符轉換為數值 .
SELECT TO_NUMBER('999') FROM DUAL;

255. CHARTOROWID(CHAR)
將包含外部語法 ROWID CHAR VARCHAR2 數值轉換為內部的二進制語法 , 參數 CHAR 必須是包含外部語法的 ROWID 18 字符的字符串 .
SELECT NAME FROM BSEMPMS WHERE ROWID=CHARTOROWID('AAAAfZAABAAACp8AAO');
NAME : LEIXUE

256. CONVERT(CHAR,DEST_CHAR_SET,SOURCE_CHAR_SET)
CONVERT
將字符串 CHAR 中的字符從 SOURCE_CHAR_SET 標識的字符集轉換為由 DEST_CHAR_SET 標識的字符集

SELECT CONVERT('GroB','US7ASCII','WE8HP') 'CONVERSION' FROM PUBS;
CONVERSION: Gross

257. HEXTORAW(CHAR)
將包含十六進制的 CHAR 轉換為一個 RAW 數值 .
INSERT INTO BSEMPMS(RAW_COLUMN) SELECT HEXTORAW('7D') FROM TEST;

258. RAWTOHEX(RAW)
RAW 數值轉換為一個包含十六進制的 CHAR .
SELECT RAWTOHEX(RAW_COLUMN) 'CONVERSION' FROM BSEMPMS;
CONVERSION: 7D

259. ROWIDTOCHAR(ROWID)
將一個 ROWID 數值轉換為 VARCHAR2 數据類型 .
SELECT ROWID FROM BSEMPMS WHERE ROWIDTOCHAR(ROWID) LIKE '%BR1AAB%';

260. TO_MULTI_BYTE(CHAR)
CHAR 中的單字節轉換為等价的多字節字符 .
SELECT TO_MULTI_BYTE('ASFDFD') FROM TEST;

261. TO_SINGLE_BYTE(CHAR)
CHAR 中的多字節轉換為等价的單字節字符 .
SELECT TO_SINGLE_BYTE('ASFDFD') FROM TEST;

262. TRANSLATE USING(TEXT USING {CHAR_CS|NCHAR_CS})
將文本 TEXT 按照指定的轉換方式轉換成數据庫字符集和民族字符集 .
其中 TEXT 是待轉換的 .
USING CHAR_CS
參數轉換 TEXT 為數据庫字符集 , 輸出數据類型是 VARCHAR2.
USING NCHAR_CS
參數轉換 TEXT 為數据庫字符集 , 輸出數据類型是 NVARCHAR2.
CREATE TABLE TEST(CHAR_COL CHAR(20),NCHAR_COL NCHAR(20));
INSERT INTO TEST VALUES('HI,N'BYE');
SELECT * FROM TEST;

263. DUMP(EXPR,RETURN_FORMAT,START_POSITION,LENGTH)
返回一個包含數据類型代碼 , 字節長度等內部表示信息的 VARCHAR2 . 返回結果是當前數据庫字符集 , 數据類型按照下面規定的內部數据類型的編碼作為一個數字進行返回 :
代碼 數据類型
0 VARCHAR2
1 NUMBER
8 LONG
12 DATE
23 RAW
24 LONG RAW
69 ROWID
96 CHAR
106 MSSLABEL
參數 RETUEN_FORMAT 指定按照下面的基數表示返回的數值 .
RETURN_FORMAT RESULT
8 8
進制
10 10
進制
16 16
進制
17
單字符表示
如果參數 RETURN_FORMAT 沒有指定 , 則按十進制表示返回 .
如果參數 START_POSITION LENGTH 被指定 , 則從 START_POSITION 開始的長為 LENGTH 的字節將被返回 , 缺省是返回整數表示 .
SELECT DUMP('ABC',1016) FROM TEST;
select dump(ename,8,3,2) 'example' from emp where name='ccbzzp';

264. empty_b|clob()
返回一個空的 LOB 定位符 , 用在初始化 LOB 變量 , 或用在 INSERT UPDATE 聲明去初始化 LOB 列或將其屬性置為空 .
INSERT INTO TABLE1 VALUES(EMPTY_BLOB());
UPDATE TABLE1 SET CLOB_COL=EMPTY_BLOB();

265. BFILENAME('DIRECTORY','FILENAME')
返回一個 BFILE 定位符 , 相關的二進制 LOB 物理文件在服務器的文件系統上 . 目錄 DIRECTORY 是指在服務器的文件系統上實際搜索路徑全名的別名 . FILENAME 是指服務器的文件系統的文件名 .
INSERT INTO FILE_TAB VALUES(BFILENAME('LOB_DIR','IMAGE1.GIF'));

266. GREATEST(EXPR,EXPR,...)
GREATEST
返回參數的最大值 .
SELECT GREATEST('HARRY','HARRIOT','HAROLD') 'SAMPLE' FROM TABLE1;

267. LEAST(EXPR,EXPR,...)
LEAST
返回參數的最小值 .
SELECT LEAST('HARRY','HARRIOT','HAROLD') 'SAMPLE' FROM TABLE1;

268. NLS_CHARSET_DECL_LEN(BYTECNT,CSID)
返回一個 NCHAR 列的寬度 .
SELECT NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EEFDFDF')) FROM TABLE1;

269. NLS_CHARSET_ID(TEXT)
返回相應于 NLS 字符集名字的 NLS 字符集 ID .
SELECT NLS_CHARSET_D('JADFDFFDF') FROM TABLE1;

270. NLS_CHARSET_NAME(N)
返回相應于 ID N NLS 字符集名稱 .
SELECT NLS_CHARSET_NAME(2) FROM TABLE1;

271. NVL(EXPR1,EXPR2)
EXPR1 NULL, 則返回 EXPR2, 否則返回 EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1;

272. UID
返回唯一標識當前數据庫用戶的整數 .
SELECT UID FROM TABLE1;

273. USER
VARCHAR2 數据類型返回當前 ORACLE 用戶的名稱 .
SELECT USER,UID FROM TABLE1;

274. USERENV(OPTION)
返回當前的會話信息 .
OPTION='ISDBA'
若當前是 DBA 角色 , 則為 TRUE, 否則 FALSE.
OPTION='LANGUAGE'
返回數据庫的字符集 .
OPTION='SESSIONID'
為當前會話標識符 .
OPTION='ENTRYID'
返回可審計的會話標識符 .
OPTION='LANG'
返回會話語言名稱的 ISO 簡記 .
OPTION='INSTANCE'
返回當前的實例 .
SELECT USERENV('LANGUAGE') FROM DUAL;

275. VSIZE(EXPR)
返回 EXPR 內部表示的字節數 .
SELECT NAME,VSIZE(NAME) FROM TABLE1;

276. DEREF(E)
返回參數 E 的對象引用 .
SELECT DEREF(C2) FROM TABLE1;

277. REFTOHEX(R)
將參數 R 轉換為 16 進制 .
SELECT REFTOHEX(C2) FROM TABLE1;

278. MAKE_REF(TABLE,KEY,KEY...)
通過把給定的鍵作為主鍵來創建給定視圖對象中一行的引用 .
CREATE TYPE T1 AS OBJECT(A NUMBER,B NUMBER);
CREATE TABLE TB1(C1 NUMBER,C2 NUMBER,PRIMARY KEY(C1,C2));
CREATE VIEW V1 OF T1 WITH OBJECT OID(A,B) AS SELECT * FROM TB1;
SELECT MAKE_REF(V1,1,3) FROM PUBS;

279. STDDEV(DISTINCT|ALL X)
STDDEV
給出一組行值的標准差 .
SELECT STDDEV(SALARY) AS EXAMPLE FROM EMPLOYEE;

280. VARIANCE(DISTINCT|ALL X)
VARIANCE
返回一組行中所有 VALUE 的方差 .
SELECT VARIANCE(SALARY) AS EXAMPLE FROM EMPLOYEE;
 

你可能感兴趣的:(oracle,Date,table,search,insert,byte)