時間函式

onejq發表於2015-02-22
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部落格 ” ,連結:http://blog.itpub.net/14888950/viewspace-1439701/,如需轉載,請註明出處,否則將追究法律責任。

相關文章