2014-09-23 91 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