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

Oracle 日期計算實用技巧:獲取月份天數、首尾日期與 TRUNC 函數應用

     編輯:Oracle 教學

Oracle 日期計算實用技巧

Oracle 資料庫中常需計算月份天數、取得月首尾日期,或使用 TRUNC 函數截取日期時間。本文彙整多種寫法與效能比較,供開發參考。

一、查詢某月份天數

核心邏輯:下個月第一天 減去 這個月第一天。

-- 寫法 1:使用 ADD_MONTHS 與 TRUNC
SELECT TO_NUMBER(
    ADD_MONTHS(TRUNC(TO_DATE('2014-11-04 11:13:53', 'yyyy-mm-dd hh24:mi:ss'), 'mm'), 1)
    - TRUNC(TO_DATE('2014-11-04 11:13:53', 'yyyy-mm-dd hh24:mi:ss'), 'mm')
) daycount FROM dual;

-- 寫法 2:直接使用 SYSDATE(推薦)
SELECT TO_NUMBER(
    ADD_MONTHS(TRUNC(SYSDATE, 'mm'), 1) - TRUNC(SYSDATE, 'mm')
) dayscount FROM dual;

-- 寫法 3:最簡潔
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'mm'), 1) - TRUNC(SYSDATE, 'mm') FROM dual;

二、查詢月份第一天與最後一天

-- 寫法 1:LAST_DAY 函數
SELECT TO_CHAR(TRUNC(ADD_MONTHS(LAST_DAY(SYSDATE), -1) + 1), 'yyyy-mm-dd') "本月第一天",
       TO_CHAR(LAST_DAY(SYSDATE), 'yyyy-mm-dd') "本月最後一天"
FROM dual;

-- 寫法 2:TRUNC 截取月份
SELECT TO_CHAR(TRUNC(SYSDATE, 'MONTH'), 'yyyy-mm-dd') First_DayOfMonth,
       TO_CHAR(LAST_DAY(TRUNC(SYSDATE, 'MONTH')), 'yyyy-mm-dd') Last_DayOfMonth
FROM dual;

-- 寫法 3:ADD_MONTHS 組合
SELECT ADD_MONTHS(TO_DATE(LAST_DAY(SYSDATE) + 1), -1) FROM dual;  -- 本月第一天
SELECT ADD_MONTHS(TO_DATE(LAST_DAY(SYSDATE)), -1) FROM dual;      -- 上月最後一天

三、TRUNC 函數完整用法參考

日期截取:

  • TRUNC(SYSDATE) → 今天日期(時分秒歸零)
  • TRUNC(SYSDATE, 'mm') → 本月第一天
  • TRUNC(SYSDATE, 'yy') / TRUNC(SYSDATE, 'yyyy') → 今年第一天
  • TRUNC(SYSDATE, 'dd') → 當前年月日
  • TRUNC(SYSDATE, 'd') → 本週第一天(週日)
  • TRUNC(SYSDATE, 'hh') → 當前小時(分鐘秒歸零)
  • TRUNC(SYSDATE, 'mi') → 當前分鐘(秒歸零),不支援秒精度

數字截取(不四捨五入):TRUNC(number, num_digits)

  • TRUNC(123.458) → 123
  • TRUNC(123.458, 1) → 123.4
  • TRUNC(123.458, -1) → 120
  • TRUNC(123.458, -4) → 0
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved