一般 - 如果有的話可能:
你應該避免文化特定的日期/時間文字和更好地使用適當的數據類型!
你的問題有所有SQL Server提供了可能的格式沒有純回答:一個日期01/13/2016
處於mdy
文化有效的,但是是無效的,如果文化是dmy
。更加危險的是:如果日期是03/05/2016
它是有效的,但是你會得到不同的值...
在沒有像03/05/08
這樣的年份的格式中,你會有純粹的混亂。
你可能會與此
select * from sys.syslanguages
我想告訴什麼提取細節:您要知道,你必須指定文化。永遠不要依賴任何隱式投射!即使檢查的有效日期可能是錯誤的輸入...
但是你運氣不錯,因爲你正在使用SQL Server 2012.有新的TRY_PARSE and TRY_CONVERT您可以在其中指定目標文化。如果演員失敗,您將獲得有效的日期/時間或NULL
。
在鏈接頁面,你還會發現TRY_CONVERT
在那裏你可以指定通過style
格式...
入住這apporach與TRY_CONVERT
:
declare @dateofbirth varchar(max)='12/13/2016';
declare @dateofbirth_flag bit;
SET @dateofbirth_flag=CASE WHEN TRY_CONVERT(date,@dateofbirth,101) IS NULL THEN 0 ELSE 1 END
SELECT @dateofbirth_flag
--The result: `1` for style `101`
SET @dateofbirth_flag=CASE WHEN TRY_CONVERT(date,@dateofbirth,102) IS NULL THEN 0 ELSE 1 END
SELECT @dateofbirth_flag
--The result: `0` for style `102`
謝謝你,這麼明確的解釋,是其有權指定文化,但是當我從一個過時的Excel文件導入數據我必須採取所有可能的日期格式護理。 –
@SiddharthBhardwaj好吧,那可能是一團糟......一個想法:如果日期是給定Excel-Context中的有效日期,那麼可以使用Excel-Formula以definit格式生成字符串文字... – Shnugo