一、数值型函数
- 返回绝度值 abs()
SELECT ABS(100),ABS(-100) FROM dual; - sign(),返回正负数,正:1;负:-1;0:0
select sign(100),sign(-100),sign(0) from dual; - ceil()返回大的较小整数,floor()返回小的较大整数,round()四舍五入
SELECT CEIL(4.9),CEIL(-4.9),FLOOR(4.9),FLOOR(-4.9),ROUND(4.9),ROUND(-4.9) FROM dual; - power(n,m)返回 n 的 m 次幂
SELECT POWER(2,4) FROM dual; - mod(n,m) 返回n除以m的余数
SELECT mod(4,3) FROM dual; - trunc(n,m) 截取函数,n:需要截取的数,m为精度
- 返回当年第一天
SELECT TRUNc(SYSDATE,‘yyyy’),TRUNC(SYSDATE,‘yy’) FROM dual; - 返回当月第一天
SELECT TRUNc(SYSDATE,‘MM’) FROM dual; - 返回当前时间
SELECT TRUNc(SYSDATE,‘dd’),TRUNC(SYSDATE) FROM dual; - 不会进行四舍五入,分别返回 199.1、199.19、199
SELECT trunc(199.199,1),TRUNC(199.199,2),TRUNC(199.199,0.1) FROM dual;
二、字符型函数
- 返回ascii(x)最左端的字符串码值,只去汉字最左端的一个字
SELECT ASCII(‘A’) A,ASCII(‘a’) “a”,ASCII(‘汗’) “汉字”,ASCII(‘汗子han’),ASCII(‘Aa’) “Aa” FROM dual; - CHR(x)将ASSII码转换成字符,与上边互反
SELECT CHR(65) A,CHR(47801) “汗”,CHR(48882) “汉字” FROM dual; - concat(n,m)和|| 连接两个字符串
SELECT CONCAT(‘010’,‘转8888’) AS “CONCAT”,‘010’|| ‘转’ || ‘8888’ FROM dual; - initcap() 返回字符串,每个单词首字母大写,其他小写
SELECT initcap(‘i am zhouxudong’) one,INITCAP(‘我 是 i Am zhouxudong’) TWO FROM dual; - lower()/upper()转换大小写
SELECT lower(‘AaBbCc’),UPPER(‘AaBbCc’) FROM dual; - nls_initcap(),同上,可以排序,nls_lower()和nls_upper()同理
SELECT nls_initcap(‘a A g d’,‘nls_sort=SCHINESE_PINYIN_M’) FROM dual; - instr(c1,c2,I,[J]) 在一个字符串搜索指定的字符,从第I个开始,第J次出现的位置,全角算一个字符;
SELECT INSTR(‘桃桃今天来了’,‘来’,1,1)FROM dual; - length()/lengthb();返回字符串长度,
SELECT LENGTH(‘长度aa’),LENGTHB(‘长度aa’) FROM dual; - lpad(c1,n,c2) 在c1左c2填充,知道长度n为止,n为总长度
SELECT LPAD(‘hh’,7,‘ab’) FROM dual; - .rpad(c1,n c2) 往右边填充
SELECT RPAD (‘右边’,10,’*’) FROM dual; - ltrim()删除左边、rtrim()删除右边
SELECT LTRIM(‘xxxleft delete’),LTRIM(‘xxxleft delete’,‘x’) FROM dual; - replace(c1,c2,[c3]) c1中的c2 换成c3
SELECT REPLACE(‘he is a dog’,‘he’,‘you’) FROM dual; - substr(c1,i,[j])/substrb(c1,i,[j])从第i个位置截取j个字符串,全角半角有区别
SELECT substr(‘abcdefg汉字’,2,8),SUBSTRB(‘abcdefg汉字’,2,8)FROM dual;
三、时间函数
- sysdate,返回当前时间
SELECT SYSDATE FROM dual; - add_months() 延后几个月
SELECT add_months(sysdate,2) FROM dual; - 获取当前,mysql是select now();此处不一样
SELECT SYSDATE FROM dual; - 在当前时间往后加2个月
SELECT add_months(SYSDATE,2) FROM dual; - 查询某个月的最后一天
SELECT last_day(birthday) FROM student; - 往后数,离星期几最近的的时间,就是星期几的前一天,明天的日期不算
SELECT next_day(SYSDATE,2)FROM dual; - 时间间隔
SELECT months_between (‘1-2月-10’,SYSDATE) FROM dual;