Oracle函数总结(含举例)持续更新

字符函数
concat(字符串1,字符串2)

将字符串1和字符串2连接成一个新的字符串

==========================================
select concat('zhang','junjie') from dual;
==========================================
CONCAT('ZHANG','JUNJIE')	zhangjunjie
==========================================
lpad(字段,总的大小,添充字符)

左填充即向右对齐

============================================================
select 'zhang' as aaa,lpad('zhang',10,'*') as bbb from dual;
============================================================
AAA	zhang
BBB	*****zhang
============================================================
rpad(字段,总的大小,添充字符)

右填充即向左对齐

============================================================
select 'zhang' as aaa,rpad('zhang',10,'*') as bbb from dual;
============================================================
AAA	zhang
BBB	zhang*****
============================================================
lower(字符串)

将字符串全部变成小写

=============================================
select lower('ZHANGJUNJIE') as aaa from dual;
=============================================
AAA	zhangjunjie
=============================================
upper(字符串)

将字符串全部变成大写

=============================================
select upper('zhangjunjie') as aaa from dual;
=============================================
AAA	ZHANGJUNJIE
=============================================
initcap(字符串)

将字符串变成第一个字母大写,其余都变成小写

==============================================
select initcap('zhangjunjie') as aaa from dual;
==============================================
AAA	Zhangjunjie
==============================================
length(字符串)

求出字符串的长度,按字数算

==============================================
select length('zhangjunjie') as aaa from dual;
==============================================
AAA	11
==============================================
select length('张俊杰') as aaa from dual;
==============================================
AAA	3
==============================================
lengthb(字符串)

求出字符串的长度,按字节算

==============================================
select lengthb('zhangjunjie') as aaa from dual;
==============================================
AAA	11
==============================================
select lengthb('张俊杰') as aaa from dual;
==============================================
AAA	9
==============================================
substr(字符串,开始位置,长度)

从字符串中取子串

==================================================
select substr('zhangjunjie',1,5) as aaa from dual;
==================================================
AAA	zhang
==================================================
instr(字符串,字符)

查看字符是否在字符串中存在;不存在返回0;

存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置

按字数来算

===================================================
select instr('zhangjunjie','m') as aaa from dual;
===================================================
AAA	0
===================================================
select instr('zhangjunjie','z') as aaa from dual;
===================================================
AAA	1
===================================================
select instr('zhangjunjie','j') as aaa from dual;
===================================================
AAA	6
===================================================
select instr('我叫张俊俊','俊',1,1) as aaa from dual;
===================================================
AAA	4
===================================================
select instr('我叫张俊俊','俊',1,2) as aaa from dual;
===================================================
AAA	5
===================================================
instrb(字符串,字符)

查看字符是否在字符串中存在;不存在返回0;

存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置

按字节来算,此处测试环境一个字三个字节

====================================================
select instrb('我叫张俊俊','俊',1,1) as aaa from dual;
====================================================
AAA	10
====================================================
select instrb('我叫张俊俊','俊',1,2) as aaa from dual;
====================================================
AAA	13
====================================================
trim(字符 FROM 字符串)

去掉字符串首尾的字符

======================================================
select trim('z' from 'zhangjunjiez') as aaa from dual;
======================================================
AAA	hangjunjie
======================================================

去掉字符串末尾的空格

===============================================
select trim('zhangjunjie a ') as aaa from dual;
===============================================
AAA	hangjunjie
===============================================
rtrim(字符串,字符串)

去掉字符串右边的字符

==================================================
select rtrim('zhangjunjiez','z') as aaa from dual;
==================================================
AAA	zhangjunjie
==================================================
ltrim(字符串,字符串)

去掉字符串左边的字符

==================================================
select ltrim('zhangjunjiez','z') as aaa from dual;
==================================================
AAA	hangjunjiez
==================================================
to_char()

将不是其他类型转成字符类型;

=====================================
select to_char(123) as aaa from dual;
=====================================
AAA	123
=====================================

对于日期型可以控制其格式:TO_CHAR(日期,‘格式’);

其中格式有: ‘YYYY’ --以4为显示年; ‘YEAR’ --以标准格式显示年; ‘MM’ ; ‘MON’ ; ‘DD’ ; ‘DAY’; ‘HH’ ; ‘MI’ ;‘SS’

======================================================
select to_char(sysdate,'yyyy-mm-dd') as aaa from dual;
======================================================
AAA	2021-02-12
======================================================
replace(字符串,字符串1,字符串2)

将字符串中的字符1替换成字符2

==================================================================================
select replace('zhangjunjie','jie','jun') as aaa from dual;
==================================================================================
AAA	zhangjunjun
==================================================================================
select replace(replace('zhangjunjie','jie','jun'),'zhang','jun') as aaa from dual;
==================================================================================
AAA	junjunjun
==================================================================================
translate(字符串,字符串1,字符串2)

替换多的字符

=========================================================
select translate('zhangjunjie','j','m') as aaa from dual;
=========================================================
AAA	zhangmunmie
=========================================================

注:replace(‘abcd’,‘ab’,‘AB’)把 ‘abcd’ 中的 ‘ab’ 当做一个整体,替换成 ’AB‘ ,而translate(‘abcd’,‘ab’,‘AB’)是 ‘a’ 替换为 ’A‘ ,’b‘ 替换为 ’B‘,例如

===========================================================
select replace('zhangjunjie','gu','ie') as aaa from dual;
===========================================================
AAA	zhangjunjie
===========================================================
select translate('zhangjunjie','gu','ie') as aaa from dual;
===========================================================
AAA	zhanijenjie
===========================================================
ascii(char)

求字符的ascii码

==========================
select ascii(0) from dual;
==========================
ASCII(0)	48
==========================
substr(字符串,start,length)

截取字符串,按照字来算开始和长度

==================================================
select substr('我叫张俊杰哈哈',4,3) as aaa from dual;
==================================================
AAA	俊杰哈
==================================================
select substr('abcde',4,2) as aaa from dual;
==================================================
AAA	de
==================================================
substrb(字符串,start,length)

截取字符串,按照字节来算开始和长度

===================================================
select substrb('我叫张俊杰哈哈',4,3) as aaa from dual;
===================================================
AAA	叫
===================================================
select substrb('abcde',4,2) as aaa from dual;
===================================================
AAA	de
===================================================
nlssort(字符串)

对字符串排序

=============================================================================================================
select value,name from dm.dim_nc_taskreceivestaus;
=============================================================================================================
1	委托
2	接收
3	规划
4	试验
5	试验结果确认
6	报告
7	入库
8	出库
=============================================================================================================

按拼音排序

=============================================================================================================
select value,name from dm.dim_nc_taskreceivestaus a order by nlssort(a.name,'nls_sort = schinese_pinyin_m');
=============================================================================================================
6	报告
8	出库
3	规划
2	接收
7	入库
4	试验
5	试验结果确认
1	委托
=============================================================================================================

按笔画排序

=============================================================================================================
select value,name from dm.dim_nc_taskreceivestaus  a order by nlssort(a.name,'nls_sort = schinese_stroke_m');
=============================================================================================================
7	入库
8	出库
6	报告
1	委托
3	规划
4	试验
5	试验结果确认
2	接收
=============================================================================================================

按部首排序

=============================================================================================================
select value,name from dm.dim_nc_taskreceivestaus  a order by nlssort(a.name,'nls_sort = schinese_radical_m');
=============================================================================================================
7	入库
8	出库
1	委托
6	报告
2	接收
3	规划
4	试验
5	试验结果确认
=============================================================================================================
数学函数
abs(x)

返回x的绝对值

====================================
select abs(100),abs(-100) from dual;
====================================
ABS(100)	100
ABS(-100)	100
====================================
ceil(数字)

向上取整,返回大于X的最小整数值;不论小数后的书为多少都要向前进位

======================================
select ceil(123.01) as aaa from dual;
======================================
AAA	124
======================================
select ceil(-123.99) as aaa from dual;
======================================
AAA	-123
======================================
floor(数字)

向下取整,返回小于等于x的最大整数值;不论小数后的书为多少都删除

=======================================
select floor(123.99) as aaa from dual;
=======================================
AAA	123
=======================================
select floor(-123.01) as aaa from dual;
=======================================
AAA	-124
=======================================
mod(被除数,除数)

取余数

==================================
select mod(20,3) as aaa from dual;
==================================
AAA	2
==================================
round(数字,从第几为开始取)

四舍五入

=========================================
select round(123.5,0) as aaa from dual;
=========================================
AAA	124
=========================================
select round(-123.5,0) as aaa from dual;
=========================================
AAA	-124
=========================================
select round(123.5,-2) as aaa from dual;
=========================================
AAA	100
=========================================
select round(-123.5,-2) as aaa from dual;
=========================================
AAA	-100
=========================================
sign(数字)

判断是正数还是负数;正数返回1,负数返回-1,0返回0

=================================
select sign(5) as aaa from dual;
=================================
AAA	1
=================================
select sign(-5) as aaa from dual;
=================================
AAA	-1
=================================
select sign(0) as aaa from dual;
=================================
AAA	0
=================================
sqrt(数字)

对数字开方

=================================
select sqrt(9) as aaa from dual;
=================================
AAA	3
=================================
power(m,n)

求m的n次方

====================================
select power(3,2) as aaa from dual;
====================================
AAA	9
====================================
trunc(数字,从第几位开始)

切数字

===========================================
select trunc(123.99,1) as aaa from dual;
===========================================
AAA	123.9
===========================================
select trunc(-123.99,1) as aaa from dual;
===========================================
AAA	-123.9
===========================================
select trunc(123.99,-1) as aaa from dual;
===========================================
AAA	120
===========================================
select trunc(-123.99,-1) as aaa from dual;
===========================================
AAA	-120
===========================================
select trunc(12345.99,-3) as aaa from dual;
===========================================
AAA	12000
===========================================
select trunc(123.99) as aaa from dual;
===========================================
AAA	123
===========================================
greatest(数字列表)

找出数字列表中最大的数

===========================================
select greatest(12,13,14) as aaa from dual;
===========================================
AAA	14
===========================================
==========================================================================================
select nvl(accept_t1_sl,0),nvl(accept_t2_sl,0),nvl(accept_t3_sl,0),
nvl(warehouse_t1_sl,0),nvl(warehouse_t2_sl,0),nvl(warehouse_t3_sl,0),
greatest(nvl(accept_t1_sl,0),nvl(accept_t2_sl,0),nvl(accept_t3_sl,0),
nvl(warehouse_t1_sl,0),nvl(warehouse_t2_sl,0),nvl(warehouse_t3_sl,0)) from dm_mes_yslnyqs;
==========================================================================================
790019	164007	172676	810885	264895	160395	810885
711784	183439	53032	511285	152569	98646	711784
0		260738	197138	0		240006	154387	260738
0		435286	263266	0		380708	311975	435286
0		484034	234411	0		413621	266563	484034
0		358949	171592	0		398217	249115	398217
0		562819	360864	0		730140	248138	730140
0		651041	292618	0		504598	363779	651041
0		438445	386789	0		681467	379310	681467
0		580927	207775	0		421569	306155	580927
0		1057892	278849	0		743401	271820	1057892
0		702351	291273	0		1038852	332523	1038852
==========================================================================================
least(数字列表)

找出数字列表中最小的数

========================================
select least(12,13,14) as aaa from dual;
========================================
AAA	12
========================================
==========================================================================================
select nvl(accept_t1_sl,0),nvl(accept_t2_sl,0),nvl(accept_t3_sl,0),
nvl(warehouse_t1_sl,0),nvl(warehouse_t2_sl,0),nvl(warehouse_t3_sl,0),
least(nvl(accept_t1_sl,0),nvl(accept_t2_sl,0),nvl(accept_t3_sl,0),
nvl(warehouse_t1_sl,0),nvl(warehouse_t2_sl,0),nvl(warehouse_t3_sl,0)) from dm_mes_yslnyqs
==========================================================================================
790019	164007	172676	808890	264895	160395	160395
740310	183439	53032	529974	152569	98646	53032
0		260738	197138	0		240006	154387	0
0		435286	263266	0		380708	311975	0
0		484034	234411	0		413621	266563	0
0		358949	171592	0		398217	249115	0
0		562819	360864	0		730140	248138	0
0		651041	292618	0		504598	363779	0
0		438445	386789	0		681467	379310	0
0		580927	207775	0		421569	306155	0
0		1057892	278849	0		743401	271820	0
0		702351	291273	0		1038852	332523	0
==========================================================================================
正旋余旋正切反正切
函数作用
sin(n)求n的正旋
cos(n)求n的余旋
tan(n)求n的正切
acos(n)求n的反正切
atan(n)求n的反正切
exp(n)求n的指数
ln(n)求n的自然对数,n必须大于0
log(m,n)求n以m为底的对数,m和n为正数,且m不能为0
===============================
select sin(9) as aaa from dual;
===============================
AAA	0.412118485241756
===============================
select cos(9) as aaa from dual;
===============================
AAA	-0.911130261884677
===============================
select tan(9) as aaa from dual;
===============================
AAA	-0.45231565944181
===============================
日期函数
add_months(日期,数字)

在以有的日期上加一定的月份

=========================================================================
select add_months(to_date('2020-03-01','yyyy-mm-dd'),2) as aaa from dual;
=========================================================================
AAA	2020/5/1
=========================================================================
last_day(日期)

求出该日期的最后一天(本月的最后一天)

======================================================================
select last_day(to_date('2020-03-01','yyyy-mm-dd')) as aaa from dual;
======================================================================
AAA	2020/3/31
======================================================================
months_between(日期1,日期2)

求出两个月之间的天数(注意返回的天数为小数)

================================================================================================================================
select months_between(to_date('2020-03-11 12:10:10','yyyy-mm-dd hh24:mi:ss'),to_date('2020-03-10 00:10:10','yyyy-mm-dd hh24:mi:ss'))*31 as aaa from dual;
================================================================================================================================
AAA	1.5
================================================================================================================================
next_day(date,char)

date为参数日期型,char为1~7或者monday,tuesday;

1为星期日,2为星期一,依次类推

=============================================================================
注:2021-02-04为星期四
=============================================================================
select next_day(to_date('2021-02-04','yyyy-mm-dd'),2) as aaa from dual;
=============================================================================
AAA	2021/2/8
=============================================================================
select next_day(to_date('2021-02-04','yyyy-mm-dd'),'星期一') as aaa from dual;
=============================================================================
AAA	2021/2/8
=============================================================================
select next_day(to_date('2021-02-04','yyyy-mm-dd'),'星期二') as aaa from dual;
=============================================================================
AAA	2021/2/9
=============================================================================
trunc(d1[,c1])

返回日期d1所在期间(参数c1)的第一天日期

d1日期型,c1为字符型(参数),c1默认为j(即当前日期)

=============================================
select sysdate 当时日期,
trunc(sysdate) 今天日期,
trunc(sysdate,'hh') 此时时,
trunc(sysdate,'mi') 此时分钟,
trunc(sysdate,'mi')+10/(24*60) 十分钟以后,
trunc(sysdate,'day') 本周星期日,
trunc(sysdate,'month') 本月初,
trunc(sysdate,'q') 本季初日期, 
trunc(sysdate,'year') 本年初日期 from dual;
=============================================
当时日期	2021/2/24 17:39:27
今天日期	2021/2/24
此时小时	2021/2/24 17:00:00
此时分钟	2021/2/24 17:39:00
此时分钟	2021/2/24 17:49:00
本周星期日	2021/2/21
本月初		 2021/2/1
本季初日期	2021/1/1
本年初日期	2021/1/1
=============================================
转换函数
to_number

将字符串X转化为数字型

=======================================================================
select to_number('199912') as aaa,to_number('450.05') as bbb from dual;
=======================================================================
AAA	199912
BBB	450.05
=======================================================================
to_date

将字符串X转化为日期型

=======================================================================
select to_date('199912','yyyymm') as aaa,
to_date('2000.05.20','yyyy.mm.dd') as bbb,
(date '2008-12-31')  as ccc, 
to_date('2008-12-31 12:31:30','yyyy-mm-dd hh24:mi:ss') as ddd
from dual;
=======================================================================
AAA	1999/12/1
BBB	2000/5/20
CCC	2008/12/31
DDD	2008/12/31 12:31:30
=======================================================================
to_char(x,c1)

将日期或数据转换为char数据类型

【说明1】x为数据型时

c1格式表参考:

序号格式简例说明
1,(逗号)‘9999,999’逗号,一般以千分位出现,作为分组符号使用.如果需要您也可以当作是十分位,百分位出现,可以出现N次,视乎数字的大小而定.
变态的例子是 to_char(1234,‘9,9,9,9’).
注意事项:只能出现在整数部分.
2.(点号)‘99.99’点号,不要念为"句号",句号是个圆圈,点好只能出现在小数点对应的地方.只能出现一次.
to_char(1234.34,‘9,9,9,9.99’)
注意事项:只能出现在一个地方,就是原来数据小数点位置
3$(美元符号)‘$999.99’美元.其实你可以放在任意地方(在10G下)
to_char(1234.34,‘9,9,9,9.$99’)
注意事项:只能出现一次.
40(零)‘0999.99’零.在对应位置返回对应的字符,如果没有则以’0’填充.
to_char(0.34,‘9,9,9,0.$99’)=’$0.34’;to_char(1234,‘9999.00’)=‘1234.00’;
注意事项:这是一个强制的符号,对应位没有,则以’o’填充,这是9很大不同地方
59‘999.99’9.在小数位,则表示转换为对应字符,如果没有则以0表示;在整数位,没有对应则不填充字符.to_char(123,‘999.99’)=123.00; TO_CHAR(123,‘99999.9’)=123.0;注意事项:对于0和9而言,如果格式的位数不如数字的位数多,会返回’#’.譬如to_char(12345,‘9999’)=’#####’
6B(空格符)‘B999’没有其它特别作用,在整数部分最前面加一个空格,可以出现在任意位置.‘S’||TO_CHAR(1234,‘99B99’)=‘S 1234’;注意事项:只能出现在整数部位.
7C(国际货币符号)‘C9999’在特定的位置返回一个ISO货币符号(就是NLS_ISO_CURRENCY参数所代表的值)TO_CHAR(1233,‘C9999’)=‘CNY1234’ ,这是新的国际标准RMB,关于这个可查询"国际货币符号"注意事项:只能出现在整数部位第一位.可以通过alter session set NLS_ISO_CURRENCY=‘JAPAN’;来修改当前会话的设置.
8D(ISO 小数位符号)‘999D99’这是"点号"的国际版本(ISO),作用等同于点号,也是只能出现一次.所不同的是,数据库会根据NLS_NUMERIC_CHARACTER的参数值来设置内容.默认的这个值是点号.注意事项:没有特别需要一般不要用这个格式符号.也不要轻易修改参数值.也可用alter sesssion set 来修改.alter session set nls_numeric_characters=’!,’; to_char(1234.34,‘9999d99’)=1234!34
9EEEE(科学计算符)9.9EEEE科学计算符号TO_CHAR(2008032001,‘9.9EEEE’)=‘2.01E+09’,由于是科学计算方法,所以小数位前面加一个9或者0即可,多个是没有意义的.
10G(分组符号)999G999是逗号(,)的的ISO标准,作为分组符号使用,可以放在多个地方使用.TO_CHAR(123456,‘999G9G99’)=123,4,56注意事项:同第八项 -D, 此外如果要转换出小数点,则要和D配合使用,不能和点号配合.
11L(本地货币符号)‘L999’是C的本地版本.可以放在整个格式的最前面和最后面.TO_CHAR(123456,‘999G9G99D00L’)=123,4,56.00¥注意事项:同第七项 C
12MI(负号)‘9999MI’如果是负数,在尾部加上负号(-),如果是正数,则尾巴加上空格to_char(1234,‘9999mi’)||‘S’||TO_CHAR(-5678,‘9999MI’) =1234 S5678-注意事项:只能放在格式尾巴
13PR(符号)9999PR是表达负数的另外一种方式.如果是正数,则头部加上空格;如果是负数,则用小简括号<>把数字包起来.TO_CHAR(-1234.89,‘9G999D00PR’)=<1,234.89>注意事项:同12
14RN(rn)RN(rn)declarei int;beginfor i in 1…20 loopdbms_output.put_line(to_char(i,‘RN’));end loop;end;把整数(1-3999)转换为罗马字符.RN表示转为大写,rn表示小写的.
declare
i int;
begin
for i in 1…20 loop
dbms_output.put_line(to_char(i,‘RN’));
end loop;
end;
注意事项:只能自己使用,不能和其它符号组合使用.
15S‘9999S’是12,13的综合改进版本.为整数加一个正号+,为负数加一个符号-.S在前则加在前,在后则在后.TO_CHAR(-1234,‘S9999’)=-1234;TO_CHAR(1234,‘S9999’)=+1234
16TMTM9/TMe使用这个参数等于没有用参数to_char(number)一样,应为’tm9’是默认的格式参数.
to_char(1234,‘tme’)=1234
注意事项:格式要么是TM9,要么是TME.
当数字长度超过64位时候,TM9的输出等同于TME的输出.
17UU999双币符号,例如欧元.作用同11的L
TO_CHAR(999,‘U999’)=¥999
注意事项:通过NLS_DUAL_CURRENCY 控制
18V999V9这是个比较古怪,又不是很常使用的符号。它的作用在于做一个计算。
例如TO_CHAR(N,‘999V9’),以p表示V的位置,则该表达式=to_char(N×(10的P-1次方)).但是9个数又必须保证大于等于乘积之后表示的位数.
TO_CHAR(5,‘9V’)=51=5;
TO_CHAR(5,‘9V9’)=5
10=50
TO_CHAR(5,‘9V99’)=500
TO_CHAR(50,‘9V99’)=’######’ 9的个数不够
注意事项:格式中不能和小数表达写在一起,但是可以混合货币等。
19Xxxxx转换为16进制。
TO_CHAR(100,‘XX’)= 64
注意事项:数值必须是大于等于0的整数。前面只能和0或者FM组合使用.
20通过以上的例子,我们了解了各种数字的格式。可以说格式太多样,难于记在脑子,最好是作为一个参考存在着.
归类:
数值类: 0,9,
分组类: (.),(,),D,G ,其中点好和逗号因为表示不明显,所以用小括号凸显。
货币类: $,C,L,U
计算转换类:EEEE,RN,V,X
正负符号:MI,PR,S
其它类:B
正统类:TM

【示例】
to_char(1210.73, ‘9999.9’) 返回 ‘1210.7’
to_char(1210.73, ‘9,999.99’) 返回 ‘1,210.73’
to_char(1210.73, ‘$9,999.00’) 返回 ‘$1,210.73’
to_char(21, ‘000099’) 返回 ‘000021’
to_char(852,‘xxxx’) 返回’ 354’

【说明2】x为日期型,c2可用参数

to_char(sysdate,‘d’) 每周第几天
to_char(sysdate,‘dd’) 每月第几天
to_char(sysdate,‘ddd’) 每年第几天
to_char(sysdate,‘ww’) 每年第几周
to_char(sysdate,‘mm’) 每年第几月
to_char(sysdate,‘q’) 每年第几季
to_char(sysdate,‘yyyy’) 年

其他函数
nvl(字符串,替换字符)

如果字符串为空则替换,否则不替换

========================================
select nvl('123','aa') as aaa from dual;
========================================
AAA	123
========================================
select nvl('','aa') as aaa from dual;
========================================
AAA	aa
========================================
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值