雖然轉換和標準化數據從Access數據庫的SQL Server數據庫,我跑過一個有趣的問題:ISDATE()似乎並沒有成功地預測文本是否可以轉換爲日期。如何確定是否文本可以被轉換爲日期?
SELECT 'This will return an error' =
CASE
WHEN ISDATE('1/1-2010') = 1 THEN CAST('1/1-2010' AS date)
ELSE NULL
END
我認爲這是有點奇怪,作爲ISDATE() MSDN article指出該函數將返回「1,如果該表達式是有效的日期,時間,或日期時間值;否則,0」。
從我可以告訴,不與任何SET DATEFORMAT或SET LANGUAGE玩減輕這個錯誤。
也不CONVERT()表現爲具有不同的結果CAST()。
幸運的是,ISDATE()確實可以預測文本是否可以轉換爲datetime。
SELECT 'This will return a datetime' =
CASE
WHEN ISDATE('1/1-2010') = 1 THEN CAST('1/1-2010' AS datetime)
ELSE NULL
END
所以,我可以使用鑄造日期時間,然後鑄造日期的解決方法。
SELECT 'This will return a date' =
CASE
WHEN ISDATE('1/1-2010') = 1 THEN CAST(CAST('1/1-2010' AS datetime) as date)
ELSE NULL
END
但是,我不知道我是否失去了一些東西。有沒有更簡潔的方式來將文本投射到日期?作爲推論,是ISDATE()函數不在MSDN正確定義(並且實際上因此有點用詞不當的)?