微软文档说明ISDATE()
如果表达式是有效的日期、时间或日期时间值,则返回1;否则,返回0。
那么为什么下面的例子返回0
?
DECLARE @DT VARCHAR(30) = '1/4/1752'
SELECT
ISDATE(@DT),
TRY_CONVERT(DATE, @DT, 101),
TRY_CONVERT(DATETIME, @DT),
TRY_CAST(@DT as DATE),
TRY_CAST(@DT AS DATETIME)
返回值
0 1752-01-04 NULL 1752-01-04 NULL
将日期更改为1753年,然后保存更改。
1 1753-01-04 1753-01-04 00:00:00.000 1753-01-04 1753-01-04 00:00:00.000
select ISDATE('17521231'), ISDATE('17530101') gives
0 1
17520401
是有效的DATETIME2
值,但不是有效的DATETIME
值,因此ISDATE
仍然返回0。Gordon建议的TRY_CONVERT
方法也可以正确处理这种情况。(文档可能需要进行微调——17520401
是有效的DATE
,但显然不是“有效的日期值”,这是错误的。)由于向后兼容性的问题,ISDATE
本身的行为可能不会更改。 - Jeroen MostertISDATE
函数的行为或修改文档,以明确ISDATE
不覆盖DATE
的扩展范围。请注意,翻译后的内容与原文意思相同,但更易于理解。 - Jeroen Mostert