ISDate在SQL服务器中无法正常工作

时间:2015-09-24 07:41:49

标签: sql-server date

Declare @var varchar(100)
set @var  = '2000'

select 
    case when ISDATE(@var) = 1 
           then 'Valid Date' 
         when ISDATE(@var) = 0 
           then 'Invalid Date' 
    end

在上面的代码中,我有一个2000的@var值,这不是一个日期。但是,如果我使用isdate函数进行检查,则会将其标记为有效日期。

我们可以做些什么来获得预期的产出?

提前致谢

2 个答案:

答案 0 :(得分:2)

我发现有趣的事情,我希望这可以帮助你

ISDATE setParameter()

ISDATE persistence.xml

如果你运行这个

Returns 1 if the expression is a valid date, time, or datetime value; otherwise, 0.

RESULT

enter image description here

如果你运行这个

returns 0 if the expression is a datetime2 value.
  

错误:导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

因为DATETIME日期范围Declare @var varchar(100) set @var = '1753' select cast(@var as datetime) select case when ISDATE(@var) = 1 then 'Valid Date' when ISDATE(@var) = 0 then 'Invalid Date' end 在您的情况下运行实际为Declare @var varchar(100) set @var = '1752' select cast(@var as datetime) 且有效的查询时ISDATE假定它是DATETIME。

答案 1 :(得分:0)

您可以在案例陈述中添加额外的保护条款,要求@var超过7个字符(' 2000-1-1')

std::cout << "[ INFO] [" << ros::Time::now() << "]: main catch" << std::endl;