限制条件:每年不超过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 . 得到明天凌晨0点0分0秒的日期
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);
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充!