SQL日期、转换、通用函数

日期函数
1、当前系统时间
SELECT SYSDATE FROM dual ;
2、修改日期显示格式
ALTER SESSION SET NLS_DATE_FORMAT=‘yyyy-mm-dd hh24:mi:ss’;
SELECT SYSDATE FROM dual ;
3、日期函数运算
日期-数字=日期
日期+数字=日期
日期-日期=数字(天数)
SELECT SYSDATE + 3 FROM dual ;三天之后的日期
SELECT SYSDATE - 3 FROM dual ;三天之前的日期
SELECT SYSDATE-hiredate FROM emp; 雇佣天数(出现小数)
SELECT trunc(SYSDATE-hiredate)from emp;雇佣天数
4、日期操作
(1)ADD_MONTHS(日期,数字) 在指定的日期上加入指定的月数,求出新的日期
SELECT SYSDATE,ADD_MONTHS(SYSDATE, 3 ) FROM dual ;三个月之后的日期 ,
SELECT SYSDATE,ADD_MONTHS(SYSDATE, -3 ) FROM dual ;三个月之前的日期 ,
(2)MONTHS_BETWEEN(日期1,日期2) 两个日期间的月份数
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate))FROM emp;雇佣总月数
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12)FROM emp;雇佣总年数
查看雇佣信息
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 已雇佣年数,
TRUNC(MOD(MONTHS_BETWEEN(sysdate,hiredate),12)) 已雇佣月数,
TRUNC(sysdate-ADD_MONTHS(hiredate,MONTHS_BETWEEN(sysdate,hiredate))) 已雇佣天数
FROM emp ;
(3)NEXT_DAY(日期,星期数) 求出下一个星期X的具体日期
SELECT SYSDATE,NEXT_DAY(SYSDATE,‘星期日’) FROM dual ;下一个星期日
(4)LAST_DAY(日期) 指定日期的最后一天的日期
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM dual ; 当前日期所在月的最后一天
(5)EXTRACT(格式FROM数据) 抽取日期信息
SELECT EXTRACT(YEAR FROM DATE ‘2001-09-19’) years ,
EXTRACT(MONTH FROM DATE ‘2001-09-19’) months ,
EXTRACT(DAY FROM DATE ‘2001-09-19’) days
FROM dual ;
(6)计算复杂时间间隔
SELECT
EXTRACT(DAY FROM TO_TIMESTAMP(‘1982-08-13 12:17:57’,‘yyyy-mm-dd hh24:mi:ss’)
-TO_TIMESTAMP(‘1981-09-27 09:08:33’,‘yyyy-mm-dd hh24:mi:ss’)) days
FROM dual ;

转换函数
(1)TO_CHAR(日期|数字|列,转换格式)
将制定的数据按照指定的格式变为字符串型
SELECT SYSDATE 当前系统时间,TO_CHAR(SYSDATE,‘YYYY-MM-DD’) 格式化日期,
TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS’) 格式化日期时间,
TO_CHAR(SYSDATE,‘FMYYYY-MM-DD HH24:MI:SS’) 去掉前导0的日期时间
FROM dual ;

(2)TO_DATE(字符串|列,转换格式)
将制定的字符串按照指定的格式变为日期型
SELECT TO_DATE(‘1979-09-19’,‘YYYY-MM-DD’) FROM dual ;
SELECT TO_TIMESTAMP(‘1981-09-27 18:07:10’,‘YYYY-MM-DD HH24:MI:SS’) datetime
FROM dual ;

(3)TO_NUMBER(字符串|列)
将指定的数据类型变为数字型
SELECT TO_NUMBER(‘09’) + TO_NUMBER(‘19’) 加法计算,
TO_NUMBER(‘09’) * TO_NUMBER(‘19’) 乘法计算
FROM dual ;

通用函数
(1)NVL(数字|列,默认值)
如果现实的数字是null,则使用默认值表示
SELECT NVL(null,0),NVL(3,0) FROM dual ; 如果是NULL输出后面的默认值,如果不是NULL输出第一个参数值
在这里插入图片描述
(2)NVL2(数字|列,返回结果1,返回结果2)
判断指定的列是否为null,如果不为null则返回1,如果为空则返回结果2.
当comm不为NULL输出sal+comm,如果为NULL输出sal。
在这里插入图片描述
(3)NULLIF(表达式1,表达式2)
比较表达式1和表达式2的结果是否相等,如果相等返回NULL,如果不等返回表达式1
在这里插入图片描述
(4)DECODE(列|值,判断值1,显示结果1,判断值2,显示结果2…)如果现实的数字是null,则使用默认值表示
job为CLERK 显示业务员,job为SALESMAN显示销售人员…
在这里插入图片描述
(5)CASE 列| 数值WHEN 表达式1 THEN 显示结果1…ELSE 表达式n…用于实现多条件判断
当job为CLERK sal1.1 当job 为SALESMAN sal1.2…
在这里插入图片描述
(6)COALESCE(表达式1,表达式2,…,表达式n)
将表达式逐个判断,如果表达式1的内容是null,则显示表达式2,如果表达式2的内容是null,则显示表达式3
SELECT comm ,COALESCE(comm,100,2000) , COALESCE(comm,null,2000) FROM emp;
当comm为NULL显示100,当comm和null显示2000
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bigdata_zx/article/details/82995861