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