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

Oracle 日期函數與轉換函數實戰大全:MONTHS_BETWEEN、ADD_MONTHS、TO_CHAR、TO_DATE、NVL

     編輯:Oracle 資料庫基礎

日期運算與類型轉換是報表、ETL、業務邏輯的核心。本文系統講解 MONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY、LAST_DAY、ROUND/TRUNC(date) 五大日期函數,以及 TO_CHAR/TO_DATE/TO_NUMBER 轉換三劍客與 NVL 空值處理,案例驅動,即學即用。

一、核心日期函數

函數語法/示例結果/說明
MONTHS_BETWEENMONTHS_BETWEEN('01-SEP-95','11-JAN-94')19.677...(含小數,d1 > d2 為正)
ADD_MONTHSADD_MONTHS('11-JAN-94', 6)'11-JUL-94'(自動處理月末)
NEXT_DAYNEXT_DAY('01-SEP-95', 'FRIDAY')'08-SEP-95'(下一個周五)
LAST_DAYLAST_DAY('01-SEP-95')'30-SEP-95'(該月最後一天)
ROUND(date,'MONTH')ROUND('25-JUL-95','MONTH')'01-AUG-95'(月中後進位下月 1 號)
ROUND(date,'YEAR')ROUND('25-JUL-95','YEAR')'01-JAN-96'(年中後進位次年 1 月 1 號)
TRUNC(date,'MONTH')TRUNC('25-JUL-95','MONTH')'01-JUL-95'(直接截斷到月首)
TRUNC(date,'YEAR')TRUNC('25-JUL-95','YEAR')'01-JAN-95'(直接截斷到年首)

二、日期格式模板速查

YYYY  四位年    YEAR  年度拼寫
MM    兩位月    MONTH 月份全拼
DY    星期縮寫  DAY   星期全拼

三、TO_CHAR:日期/數值 → 字符串

SELECT ename, hiredate,
       TO_CHAR(hiredate, 'YYYY-MM-DD') AS hire_dt,
       TO_CHAR(sal, 'L99,999.99')      AS formatted_sal
FROM scott.emp;
-- L 為本地貨幣符號,$/¥/€ 視 NLS_TERRITORY 而定

四、TO_DATE:字符串 → 日期

INSERT INTO scott.emp(empno, ename, hiredate)
VALUES (9004, 'dtConvert', TO_DATE('1982-05-04', 'YYYY-MM-DD'));
-- 結果顯示:04-5月-82(受 NLS_DATE_FORMAT 影響)

五、NVL 空值統一處理

NVL(comm, 0)                    -- 數值
NVL(hiredate, DATE '1997-01-01')  -- 日期(ANSI 日期字面量)
NVL(job, 'No Job Yet')           -- 字符
-- 適用類型:DATE, CHAR, VARCHAR2, NUMBER 等

六、綜合案例:員工入職周年提醒

SELECT ename, hiredate,
       ADD_MONTHS(hireday, 12 * FLOOR(MONTHS_BETWEEN(SYSDATE, hiredate)/12)) AS next_anniversary
FROM emp
WHERE ADD_MONTHS(hireday, 12 * FLOOR(MONTHS_BETWEEN(SYSDATE, hiredate)/12))
      BETWEEN SYSDATE AND SYSDATE + 7;  -- 未來 7 天內過周年
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved