Oracle时间类型相关函数操作

Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。
SELECT * FROM DUAL;
-- X
SELECT USER FROM DUAL;
-- 返回当前用户名

查询当前日期,返回的为时区0的时间

SELECT SYSDATE FROM DUAL;
-- 2017/7/27 2:16:11

查询今天为几月几号

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;
-- 2017-07-27

查询当前时间,并设置格式,到秒级别

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- 24小时制
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MM:SS') FROM DUAL; -- 不能用MM表示分钟,会输出月份
-- 2017-07-27 02:16:37

将字符串按照一定格式转换为时间类型

SELECT TO_DATE('2017-07-27 12:00:00','YYYY-MM-DD HH24:MI:SS') AS DTIME FROM DUAL;
-- 2017/7/27 12:00:00

时间运算
求当前时间的一个差值

SELECT SYSDATE,SYSDATE-(INTERVAL '10' MINUTE) AS NEWTIME FROM DUAL;
-- 2017/7/27 2:52:59    2017/7/27 2:42:59

INTERVAL 字符数字 单位
字符数据必须是字符,不能为单纯的数字
单位可以是 MINUTE HOUR DAY MONTH YEAR 等,即减去相应的时间单位

SELECT ROUND(TO_NUMBER(SYSDATE-(SYSDATE-(INTERVAL '10' HOUR)))) AS IDAY FROM DUAL;
-- 0 (天)
SELECT ROUND(TO_NUMBER(SYSDATE-(SYSDATE-(INTERVAL '20' HOUR)))) AS IDAY FROM DUAL;
-- 1 (天)
SELECT ROUND(TO_NUMBER(SYSDATE-(SYSDATE-(INTERVAL '10' DAY)))) AS IDAY FROM DUAL;
-- 10 (天)
SELECT ROUND(TO_NUMBER(SYSDATE-(SYSDATE-(INTERVAL '10' YEAR)))) AS IDAY FROM DUAL;
-- 3653 (天)
由上面几天语句可以看出,计算的时间差单位是天

将时间转换为数字,并不是转成十进制那样的数字。

SELECT TO_NUMBER(TO_CHAR(SYSDATE,'YYYYMMDDHHMISS')) FROM DUAL;
-- 20170727034152

接下来是ORACLE日期类型常用的相关函数说明及举例。
1、LAST_DAY() 获取一个日期的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;
-- 2017/7/31 3:41:43

2、ADD_MONTHS(DATE,N) 将日期增加N个月,这个N可以是负数:-10,即往前查10个月。

SELECT ADD_MONTHS(SYSDATE,10) FROM DUAL;
-- 2018/5/27 3:41:33

3、MONTHS_BETWEEN(DATE1,DATE2) 两个日期之间相差的月数,如果DATE2大于DATE1,结果为负值。

SELECT MONTHS_BETWEEN(SYSDATE,SYSDATE-INTERVAL '10' MONTH) FROM DUAL;
-- 10

4、NEXT_DAY(DATE,DAY_OF_WEEK) 得到下周第N天的日期

SELECT NEXT_DAY(SYSDATE,3) FROM DUAL;
-- 2017/8/1 3:49:59

5、CURRENT_DATE() 返回当前时区的当前时间,而SYSDATE是本初子午线时间,即时区0的时间

SELECT SESSIONTIMEZONE,CURRENT_DATE FROM DUAL;
--  +08:00  2017/7/27 11:53:04
SELECT SESSIONTIMEZONE,SYSDATE FROM DUAL;
--  +08:00  2017/7/27 3:58:27

6、CURRENT_TIMESTAMP() 以timestamp with time zone 数据类型返回当前会话时区中的当前日期

SELECT CURRENT_TIMESTAMP FROM DUAL;
-- 27-7月  -17 12.01.34.133947 下午 +08:00

其它:
获取上月的最后一天的日期

SELECT TO_CHAR(LAST_DAY(SYSDATE-INTERVAL '1' MONTH),'YYYY-MM-DD') FROM DUAL;

统计当前日期是本年的第几周

SELECT TO_CHAR(SYSDATE-INTERVAL '1' MONTH,'WW') FROM DUAL;

– 时间大小的比较 大于小于等

SELECT CASE WHEN TRUNC(SYSDATE,'DD') = TO_DATE('2017-07-27','YYYY/MM/DD) THEN 1 ELSE 0 END FROM DUAL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值