2014-09-23 90 views
0

我在如下面的柱中的一個數值:ISDATE沒有驗證正確的日期

C_Date - Varchar(10) 
00030503 
10030503 

當我使用ISDATE函數在該列上,它被作爲retruning有效的日期(即,1)。 我如何確保ISDATE返回0?

Declare @c_date varchar(10) 
Set @c_date =00030503 
select case when ISDATE(@c_date)=0 then 'invalid' else 'valid' end 

請問您能糾正我嗎?

當我從表中的列應用相同的條件,它不起作用。這是給我的有效日期。例如: 我有一個與080203的日期,爲此我期待invlid結果,它正在與上面的查詢,但是當我把相同的列從表中,它是給有效的結果。

+0

@jpw他們呢?你如何解釋第一個 - >'00030503'? – 2014-09-23 16:00:14

+0

@Nadeem_MK我不好,忘了日期時間範圍從1753-01-01開始,不同於從0001-01-01開始的日期。我會將00030503解釋爲5月3日3年,但我知道MSSQL不會。 – jpw 2014-09-23 16:03:21

+1

我只是複製並粘貼你發佈的查詢並得到'invalid'作爲結果 – 2014-09-23 16:12:16

回答

2

根據MSDN;

ISDATE的返回值取決於SET DATEFORMAT,SET LANGUAGE和默認語言選項設置的設置。

如果我們明確地將DateFormat設置爲mdy,那麼它將驗證此格式的所有日期爲真;

SET DATEFORMAT mdy; 

所以在你的情況下,我想你應該精確的日期格式你想比較你的日期。我只是測試了你上面發佈的查詢,並根據需要得到'無效'的結果。

+0

+1。更好:未來,我們不要將潛在日期信息存儲在varchar列中,mkay? – 2014-09-23 16:33:40