利用字串來儲存日期、時間,常常導致處理時,會發生很多問題,印象中在某本書(忘記哪一本)上有提過,金融業彼此交換資料時,會將所有資料以固定長度、格式的字串來進行交換,這是我聽過要用字串來儲存日期的例子,但通常情況下,還是以日期資料型態來儲存,會是比較好的選擇。
以下說明日期欄位用日期型態和字串型態儲存時,需要注意的地方。
利用 ISDATE() 來檢查字串日期是否為有效日期。
SELECT
T.Date,
CASE
WHEN ISDATE(T.Date) = 0 THEN 'INVALID'
ELSE NULL
END 'DateJudge'
FROM
(
SELECT '2012/01/31' AS Date
UNION ALL
SELECT '2012/02/31'
UNION ALL
SELECT '2012/10/31'
UNION ALL
SELECT '2012/11/31'
UNION ALL
SELECT '2012/00/01' -- 字串沒處理好,容易出現
UNION ALL
SELECT '2012/13/01' -- 字串沒處理好,容易出現
) AS T
資料庫內可能出現 2012/02/01、2012-02-01、20120201、2012/2/1 等字串日期儲存格式。
使用日期型態,有 SQL Server 內建內建函數可以使用,EX:DATEADD()、DATEDIFF() 等等,方便商業邏輯實現,EX:計算天數、判斷日期為星期幾等;字串型態則須自行撰寫函數處理。
商業邏輯上有需要轉換時區的話,使用日期資料型態來儲存,就可以明顯感覺到便利性啦