Oracle时间情景

限制条件:每年不超过3次。查询网络资源总结如下:

情景1:查询时间大于本年的数据

SELECT *FROM TABLE_CESHIWHERE TIME >TRUNC(SYSDATE,'Y');

函数TRUNC():

TRUNC函数用于对值进行截断(trunc truncate 的简写,中文翻译是 “截断”或 “截短”。)

用法有两种:TRUNC(NUMBER)表示截断数字,TRUNC(date)表示截断日期。

(1)截断数字:

格式:TRUNC(n1,n2)n1表示被截断的数字,n2表示要截断到那一位。n2可以是负数,表示截断小数点前。注意,TRUNC截断不是四舍五入。

SQL>SELECT TRUNC(17.333)FROM DUAL;--17

SQL>SELECT TRUNC(17.333,1)FROM DUAL;--17.3

SQL>SELECT TRUNC(17.333,-1)FROM DUAL;--10

SQL>SELECT TRUNC(17.333,-3)FROM DUAL;--0

SQL>SELECT TRUNC(17.333,5)FROM DUAL;--17.333

SQL>SELECT TRUNC(17,1)FROM DUAL;--17

(2)截断日期:

截取今天:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'dd')FROM DUAL;--2017/11/22

SQL>SELECT SYSDATE,TRUNC(SYSDATE)FROM DUAL;--2017/11/22

截取本周第一天:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'d')FROM DUAL;--2017/11/19返回周日

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'D')FROM DUAL;--2017/11/19返回周日

截取本月第一天:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'MM')FROM DUAL;--2017/11/1

截取本年第一天:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'y')FROM DUAL;--2017/1/1

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'yy')FROM DUAL;--2017/1/1

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'yyyy')FROM DUAL;--2017/1/1

截取到小时:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'hh')FROM DUAL;--2017/11/22 19:00:00

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'HH')FROM DUAL;--2017/11/22 19:00:00

截取到分钟:

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'mi')FROM DUAL;--2017/11/22 19:46:00

SQL>SELECT SYSDATE,TRUNC(SYSDATE,'MI')FROM DUAL;--2017/11/22 19:46:00

TRUNC()函数没有秒的精确

 

情景2:查询时间大于12个月的数据

SELECT *FROM TABLE_CESHIWHERE TIME > ADD_MONTHS(SYSDATE,-12);

函数ADD_MONTHS():

ADD_MONTHS函数用于对日期进行操作,有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为单位)

3个月以后的时间,可以用下列语句

SQL>SELECT ADD_MONTHS(SYSDATE,3)FROM DUAL;--2018/2/22 20:25:16

3个月以前的时间,可以用下列语句

SQL>SELECT ADD_MONTHS(SYSDATE,-3)FROM DUAL;--2017/8/22 20:25:03

 

拓展:

1 . 取当前日期是星期几中文显示:

SELECT TO_CHAR(SYSDATE,'day')FROM DUAL;

SELECT TO_CHAR(SYSDATE,'DAY')FROM DUAL;

 

2 . 今天是今年的第N

SELECT TO_CHAR(SYSDATE,'DDD')FROM DUAL;

 

3 . 得到日期的季度

SELECT CEIL(TO_NUMBER(TO_CHAR(SYSDATE,'mm'))/3)FROM DUAL;

SELECT TO_CHAR(SYSDATE,'Q')FROM DUAL;

 

4 . 判断某一日子所在年分是否为闰年

SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(SYSDATE,'y')+31),'dd'),'29','闰年','平年')FROM DUAL;

SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,36),'y')+31),'dd'),'29','闰年','平年')FROM DUAL;  

 

5 . 得到这天的最后一秒

SELECT TRUNC(SYSDATE) + 0.99999 FROM DUAL;

 

6 . 得到明天凌晨000秒的日期

SELECT TRUNC(SYSDATE+1)FROM DUAL;

SELECT TRUNC(SYSDATE)+1 FROM DUAL;

 

7 . 得到下月一日的日期

SELECT TRUNC(ADD_MONTHS(SYSDATE,1),'mm')FROM DUAL;

 

8 . 返回当前月的最后一天

SELECT LAST_DAY(SYSDATE)FROM DUAL;        

SELECT LAST_DAY(TRUNC(SYSDATE))FROM DUAL;  

SELECT TRUNC(LAST_DAY(SYSDATE))FROM DUAL;

SELECT TRUNC(ADD_MONTHS(SYSDATE,1),'mm') - 1 FROM DUAL;--下个月一号减一天

 

9 . 得到一年的每一天(已经区分闰年/平年)

SELECT TRUNC(SYSDATE,'Y')+ RN -1 DAY_FROM (SELECT ROWNUM RNFROM ALL_OBJECTSWHERE ROWNUM<=DECODE(TO_CHAR(LAST_DAY(TRUNC(SYSDATE,'y')+31),'dd'),'29','366','365') );

 

10 . 获取本月第一天开始的7周的周一

SELECT TRUNC(SYSDATE,'mm')+RN*7-7 FROM (SELECT ROWNUM RNFROM ALL_OBJECTSWHERE ROWNUM<7);

 

11 . 获取本周1开始的7周的周一(注意,TRUNC(SYSDATE,'d')得到的是上周的周天,在美国来说相当于这周的第一天,因此TRUNC(SYSDATE,'d')+1+RN*7-7=TRUNC(SYSDATE,'d')-6+RN*7

SELECT TRUNC(SYSDATE,'d')-6+RN*7 FROM (SELECT ROWNUM RNFROM ALL_OBJECTSWHERE ROWNUM<7);

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值