常用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;