星期五, 2月 03, 2012

[SQL] 日期欄位資料型態的選擇

利用字串來儲存日期、時間,常常導致處理時,會發生很多問題,印象中在某本書(忘記哪一本)上有提過,金融業彼此交換資料時,會將所有資料以固定長度、格式的字串來進行交換,這是我聽過要用字串來儲存日期的例子,但通常情況下,還是以日期資料型態來儲存,會是比較好的選擇。

以下說明日期欄位用日期型態和字串型態儲存時,需要注意的地方。

  • 日期有效性
利用 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
[SQL] 日期資料型態的選擇
  • 字串日期格式不一致
資料庫內可能出現 2012/02/01、2012-02-01、20120201、2012/2/1 等字串日期儲存格式。
  • 函數使用
使用日期型態,有 SQL Server 內建內建函數可以使用,EX:DATEADD()、DATEDIFF() 等等,方便商業邏輯實現,EX:計算天數、判斷日期為星期幾等;字串型態則須自行撰寫函數處理。
  • 時區
商業邏輯上有需要轉換時區的話,使用日期資料型態來儲存,就可以明顯感覺到便利性啦

沒有留言:

張貼留言