【SQL日期語法完全攻略】SQL Server與Oracle日期格式與運算教學

資料庫

在資料庫操作中,日期與時間處理是非常常見的需求。SQL Server 與 Oracle 提供了強大的日期函數,但兩者在語法與使用方式上存在差異。本文將針對 SQL Server 與 Oracle 的日期格式處理與運算進行詳細說明,幫助開發者靈活應用日期處理技巧。


一、日期資料型態

1. SQL Server

  • DATE:僅包含日期 (YYYY-MM-DD)
  • DATETIME:包含日期與時間 (YYYY-MM-DD HH:MI:SS)
  • DATETIME2:精確到納秒
  • TIME:僅時間

2. Oracle

  • DATE:包含日期與時間 (YYYY-MM-DD HH:MI:SS)
  • TIMESTAMP:精確到奈秒
  • TIMESTAMP WITH TIME ZONE:帶時區

二、取得當前日期與時間

1. SQL Server

SELECT GETDATE();  -- 返回當前日期時間
SELECT SYSDATETIME(); -- 精確時間

2. Oracle

SELECT SYSDATE FROM DUAL;  -- 返回當前日期時間
SELECT SYSTIMESTAMP FROM DUAL; -- 精確時間

三、日期格式轉換

1. SQL Server – FORMAT (SQL Server 2012+)

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');

2. Oracle – TO_CHAR

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

常用格式符號:

格式說明
YYYY西元年
MM
DD
HH2424小時制
MI
SS

四、日期加減運算

1. SQL Server

  • 日期加減天數:
SELECT DATEADD(DAY, 7, GETDATE());  -- 當前日期加7天
  • 計算日期差異 (天數):
SELECT DATEDIFF(DAY, '2024-02-01', '2024-02-10');  -- 返回9天

2. Oracle

  • 日期加減天數:
SELECT SYSDATE + 7 FROM DUAL;  -- 當前日期加7天
  • 計算日期差異 (天數):
SELECT TO_DATE('2024-02-10', 'YYYY-MM-DD') - TO_DATE('2024-02-01', 'YYYY-MM-DD') FROM DUAL;  -- 返回9天

五、提取日期各部分

1. SQL Server

SELECT YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE());

2. Oracle

SELECT EXTRACT(YEAR FROM SYSDATE), EXTRACT(MONTH FROM SYSDATE), EXTRACT(DAY FROM SYSDATE) FROM DUAL;

六、日期比較

1. SQL Server

SELECT * FROM Orders WHERE OrderDate >= '2024-02-01';

2. Oracle

SELECT * FROM Orders WHERE OrderDate >= TO_DATE('2024-02-01', 'YYYY-MM-DD');

七、注意事項與最佳實踐

  1. 儘量避免直接以字串比較日期,應轉為日期型態。
  2. 時間範圍查詢,建議考慮時間部分,例如:
    • SQL Server:WHERE OrderDate >= '2024-02-01' AND OrderDate < '2024-02-02'
    • Oracle:WHERE OrderDate >= TO_DATE('2024-02-01', 'YYYY-MM-DD') AND OrderDate < TO_DATE('2024-02-02', 'YYYY-MM-DD')
  3. 使用日期函數時,注意資料型態轉換,避免隱式轉換影響效能。

熟悉 SQL Server 與 Oracle 日期處理技巧,不僅能提升查詢效率,更能確保資料準確無誤,在數據分析與報表開發中發揮更大價值。

發佈留言