trunc()
可获得天、月、年初
SELECT TRUNC(SYSDATE) FROM dual
SELECT TRUNC(SYSDATE,'mm') FROM dual
SELECT TRUNC(SYSDATE,'yyyy') FROM dual
last_day()
获得月末
SELECT last_day(SYSDATE+30) FROM dual
注意30在括号外和括号内结果不一样
next_day()
下一个周天,可以是字符也可以是数字,数字1-7分别是周日至周六
SELECT next_day(SYSDATE,'mon') FROM dual
to_char()
把日期转换成字符
SELECT to_char(SYSDATE,'d') FROM dual
当周第几天
SELECT to_char(SYSDATE,'dd') FROM dual
日期
SELECT to_char(SYSDATE,'ddd') FROM dual
当年第几周
add_months()
SELECT add_months(SYSDATE,2) FROM dual
months_between()
SELECT trunc(months_between(SYSDATE,sysdate+32)) FROM dual
各时间函数组合应用可以巧妙解决一些问题:
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not in ( '1', '7' )
查找2002-02-28至2002-02-01间除星期一和七的天数
SELECT trunc(sysdate-30+ROWNUM) FROM xiaoling.rbac_domain
SELECT to_date('2013-12-23 23:33:22','yyyy-mm-dd hh24:mi:ss')+ROWNUM FROM xiaoling.rbac_domain
生成连续日期
SELECT trunc(to_date('2013-12-23 23:33:22','yyyy-mm-dd hh24:mi:ss')+ROWNUM/1440,'mi') FROM xiaoling.rbac_domain
连续的分钟
在左关联时很有用,如
在2015-02-21 12点到15点每分钟的交易量,并把没有交易的时间排到最前面
SELECT *
FROM (SELECT TO_DATE('2015-02-21 12', 'yyyy-mm-dd hh24') +
(ROWNUM - 1) / 1440 RECORD_TIME
FROM table_name
WHERE ROWNUM <= 180)
LEFT JOIN
(SELECT TRUNC(TRADE_TIME, 'mi') RECORD_TIME, COUNT(1) CNT
FROM table_name
WHERE TRADE_TIME BETWEEN TO_DATE('2015-02-21 12', 'yyyy-mm-dd hh24') AND
TO_DATE('2015-02-21 15', 'yyyy-mm-dd hh24')
AND TRIM(MCH_NAME) = '安徽省星启天网络技术有限公司'
AND TRADE_STATE = 2
GROUP BY TRUNC(TRADE_TIME, 'mi'))
USING (RECORD_TIME)
ORDER BY CNT NULLS FIRST, RECORD_TIME
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14888950/viewspace-1439701/
,如需转载,请注明出处,否则将追究法律责任。