Sql server ISDate在SQL server中未按预期工作
在上面的代码中,我有一个2000年的Sql server ISDate在SQL server中未按预期工作,sql-server,date,Sql Server,Date,在上面的代码中,我有一个2000年的@var值,它不是日期。但是如果我使用isdate函数进行检查,它会将其标记为有效日期 我们能做些什么来获得预期的产出 提前感谢您可以在案例陈述中添加一个额外的保护条款,要求@var长度超过7个字符('2000-1-1') 选择LEN(@VAR)>7且ISDATE(@VAR)=1时的情况,然后选择“有效日期” 当LEN(@var)
@var
值,它不是日期。但是如果我使用isdate
函数进行检查,它会将其标记为有效日期
我们能做些什么来获得预期的产出
提前感谢您可以在案例陈述中添加一个额外的保护条款,要求@var长度超过7个字符('2000-1-1')
选择LEN(@VAR)>7且ISDATE(@VAR)=1时的情况,然后选择“有效日期”
当LEN(@var)<8或ISDATE(@var)=0时,“无效日期”结束
我发现了一件有趣的事情,希望这对你有所帮助
如果表达式是有效的日期、时间或日期时间值,则返回1;否则为0。
如果表达式是datetime2值,ISDATE返回0。
如果你运行这个
select case when LEN(@VAR) > 7 and ISDATE(@var)=1 then 'Valid Date'
when LEN(@var) < 8 or ISDATE(@var)=0 then 'Invalid Date' END
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
结果
如果你运行这个
select case when LEN(@VAR) > 7 and ISDATE(@var)=1 then 'Valid Date'
when LEN(@var) < 8 or ISDATE(@var)=0 then 'Invalid Date' END
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
错误:导致varchar数据类型转换为datetime数据类型
在超出范围的值中
因为日期范围是1753年1月1日到9999年12月31日在您的情况下,当您运行的查询实际上是
ISDATE('2000-01-01 00:00:00.000')
有效的ISDATE假设它是DATETIME。SQL Server不同意您的解释-选择CONVERT(Date,'2000')
运行时没有错误。因此,就SQL Server而言,2000
是一个日期。