首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 日期時間應用程式碼範例集錦

     編輯:Oracle 資料庫基礎

補充 SYSDATE 在單一查詢中固定不變的特性、擷取時分秒元素、年月日差異計算等實用程式碼片段,可直接套用於報表、批次程式。

1. SYSDATE 在查詢中為常數

SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM all_objects;
-- 所有行顯示相同時間(查詢開始瞬間)

-- 若需每行不同時間,建立函數
CREATE OR REPLACE FUNCTION sys_date RETURN DATE IS
BEGIN RETURN SYSDATE; END;
/
SELECT TO_CHAR(sys_date,'HH:MI:SS') FROM all_objects;  -- 每行重新取值

2. 擷取小時(12/24 制)

SELECT SYSDATE, TO_CHAR(SYSDATE,'HH')   FROM dual;  -- 07 (12制)
SELECT SYSDATE, TO_CHAR(SYSDATE,'HH24') FROM dual;  -- 19 (24制)
-- 年月日同理:YYYY, MM, DD

3. 精確年月日差異計算

SELECT older_date, newer_date,
       years, months,
       ABS(TRUNC(newer_date - ADD_MONTHS(older_date, years*12 + months))) days
FROM (
    SELECT TRUNC(MONTHS_BETWEEN(newer_date, older_date)/12) years,
           MOD(TRUNC(MONTHS_BETWEEN(newer_date, older_date)),12) months,
           newer_date, older_date
    FROM (
        SELECT hiredate older_date,
               ADD_MONTHS(hiredate, ROWNUM) + ROWNUM newer_date
        FROM emp
    )
);

輸出:YEARS, MONTHS, DAYS 三欄精確差異,避免單純相減天數再除 30/365 的誤差。

4. 其他常用片段

  • 本月第一天:TRUNC(SYSDATE, 'MM')
  • 本月最後一天:LAST_DAY(SYSDATE)
  • 下個月第一天:ADD_MONTHS(TRUNC(SYSDATE,'MM'),1)
  • 當前季度第一天:TRUNC(SYSDATE, 'Q')
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved