数字函数
ABS 取绝对值
POWER 乘方
LN 10为底数取幂
SQRT 平方根
EXP e的n次乘方
LOG(m,n) m为底数n取幂
数学运算函数:ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH
CEIL 大于或等于取整数
FLOOR 小于或等于取整数
MOD 取余数
ROUND(n,m) 按m的位数取四舍五入值如果round(日期): 中午12以后将是明天的日期. round(sysdate,'Y')是年的第一天
TRUNC(n,m) 按m的位数取前面的数值如果trunc(日期), 确省的是去掉时间
字符函数
CHR 按数据库的字符集由数字返回字符
CONCAT(c1,c2) 把两个字符c1,c2组合成一个字符, 和 || 相同
REPLACE(c,s,r) 把字符c里出现s的字符替换成r, 返回新字符
SUBSTR(c,m,n) m大于0,字符c从前面m处开始取n位字符,m等于0和1一样, m小与0,字符c从后面m处开始取n位字符
TRANSLATE(c,f1,t1) 字符c按f1到t1的规则转换成新的字符串
INITCAP 字符首字母大写,其它字符小写
LOWER 字符全部小写
UPPER 字符全部大写
LTRIM(c1,c2) 去掉字符c1左边出现的字符c2
RTRIM(c1,c2) 去掉字符c1右边出现的字符c2
TRIM(c1,c2) 去掉字符c1左右两边的字符c2
LPAD(c1,n,c2) 字符c1按指定的位数n显示,不足的位数用c2字符串替换左边的空位
RPAD(c1,n,c2) 字符c1按指定的位数n显示,不足的位数用c2字符串替换右边的空位
提示:去掉字符串中间的空格可以使用replace
日期函数
ADD_MONTHS(d,n) 日期值加n月
LAST_DAY(d) 返回当月的最后一天的日期
MONTHS_BETWEEN(d1,d2) 两个日期值间的月份
NEXT_DAY(d) 返回日期值下一天的日期
SYSDATE 当前的系统时间
DUAL是SYS用户下一个空表,它只有一个字段dummy
提示:dual可以理解为虚表,多在查询系统函数返回值时使用,以满足SELECT语法规则,如select sysdate from dual; select 3 + 4 from dual;
转换函数
TO_CHAR(date,'日期显示格式')
TO_CHAR(number) 用于显示或报表的格式对齐
TO_DATE(char,'日期显示格式')
TO_LOB 把long字段转换成lob字段
TO_NUMBER(char) 用于计算或者比较大小
日期显示格式
年: YYYY, YEAR, YY
季:Q
月: MM, MONTH, MON
日: DD, DAY, DY
时: HH24, HH12, HH(12小时)
分: MI
秒: SS
逻辑比较函数
NVL(EXPR1, EXPR2)
当EXPR1为空用EXPR2替代
DECODE(EXPR﹐V1﹐R1﹐V2﹐R2....)
当EXPR=V1时返回R1
当EXPR=V2是放回V2…
EXPR后条件和返回值成对出现,最后一个单值是不在条件中的返回值,如果没有单值,不满足条件的返回NULL。
SELECT ENAME, DECODE(JOB, 'MANAGER', '经理', 'PRESIDENT', '总裁', 'SALESMAN', '销售', '不详') FROM SCOTT.EMP;
CASE WHEN condition THEN express1 ELSE express2 END
当condition成立返回express1否则返回express2
SELECT ENAME, HIREDATE,
(CASE WHEN TO_NUMBER(TO_CHAR(HIREDATE, 'MM')) > 6 THEN '下半年' ELSE '上半年' END) AS 入职时间
FROM SCOTT.EMP;
--TO_CHAR(HIREDATE, 'MM')取时间月份