MS doc说明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
答案 0 :(得分:13)
正如documentation中所述,最早的datetime
值为' 1753-01-01'。
我建议你改用try_convert()
。这为您提供了更大的灵活性:
try_convert(date, '17521231') is not null
date
数据类型可以追溯到第一年。