
在資料庫操作中,日期與時間處理是非常常見的需求。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 | 日 |
HH24 | 24小時制 |
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');
七、注意事項與最佳實踐
- 儘量避免直接以字串比較日期,應轉為日期型態。
- 時間範圍查詢,建議考慮時間部分,例如:
- 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')
- SQL Server:
- 使用日期函數時,注意資料型態轉換,避免隱式轉換影響效能。
熟悉 SQL Server 與 Oracle 日期處理技巧,不僅能提升查詢效率,更能確保資料準確無誤,在數據分析與報表開發中發揮更大價值。