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

Oracle 日期時間函數大全:24 小時制、常用函數、格式元素、統計技巧與運算規則

     編輯:Oracle 資料庫基礎

核心格式對照

場景格式字串範例
24 小時制YYYY-MM-DD HH24:MI:SSTO_DATE('2006-02-12 20:02:13','YYYY-MM-DD HH24:MI:SS')
12 小時制YYYY-MM-DD HH:MI:SSTO_DATE('2006-02-12 08:02:13 PM','YYYY-MM-DD HH:MI:SS')

常用單行函數速查

格式元素完整表(節錄)

YYYY / YY / Y      年份 4/2/1 位
MM                 月份 01-12
MON / MONTH        月份縮寫/全寫
DD                 月內第幾天
DDD                年內第幾天
DAY / DY           星期全寫/縮寫
HH24 / HH12        24/12 小時制
MI                 分鐘
SS                 秒
FFn                微秒精度(n=1..9)

實用統計技巧

-- 本月每周五日期
SELECT TO_CHAR(d,'YY-MM-DD') FROM (
  SELECT TRUNC(SYSDATE,'MM')+ROWNUM-1 d FROM dba_objects WHERE ROWNUM < 32
) WHERE TO_CHAR(d,'MM')=TO_CHAR(SYSDATE,'MM') AND TRIM(TO_CHAR(d,'DAY'))='FRIDAY';

-- 按周/月/季/年分組統計
SELECT TO_CHAR(dt,'IW') 週, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'IW');
SELECT TO_CHAR(dt,'MM') 月, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'MM');
SELECT TO_CHAR(dt,'Q')  季, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'Q');
SELECT TO_CHAR(dt,'YYYY') 年, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'YYYY');

日期運算鐵律

  1. 單位為「天」:SYSDATE + 1 = 明天同一時間。
  2. 小時/分鐘/秒需折算:SYSDATE + 3/24(3小時)、SYSDATE + 30/1440(30分)、SYSDATE + 45/86400(45秒)。
  3. 括號優先:SYSDATE + (3/24) 避免整數除法截斷。

NLS 參數影響

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TERRITORY='AMERICA'; -- 影響週起始日
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數說明範例
SYSDATE資料庫伺服器當前日期時間SELECT SYSDATE FROM DUAL;
LAST_DAY(d)該月最後一天LAST_DAY(SYSDATE)
ADD_MONTHS(d,n)日期 ± n 月ADD_MONTHS(SYSDATE,2)
MONTHS_BETWEEN(d1,d2)兩日期月差MONTHS_BETWEEN(SYSDATE, DATE'2005-11-12')
NEXT_DAY(d,'星期X')d 之後下一個星期 XNEXT_DAY(SYSDATE,'FRIDAY')
CURRENT_DATESession 時區當前日期SELECT CURRENT_DATE FROM DUAL;
CURRENT_TIMESTAMPSession 時區帶精度時間戳SELECT CURRENT_TIMESTAMP FROM DUAL;
DBTIMEZONE資料庫時區SELECT DBTIMEZONE FROM DUAL;
EXTRACT(field FROM dt)擷取年/月/日/時/分/秒EXTRACT(MONTH FROM SYSDATE)
LOCALTIMESTAMPSession 時區無時區時間戳SELECT LOCALTIMESTAMP FROM DUAL;