MS指出,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发布于 2016-12-05 11:46:58
正如文档中所解释的,最早的datetime值是'1753-01-01'.
我建议您改用try_convert()。这给了您更大的灵活性:
try_convert(date, '17521231') is not nulldate数据类型可以追溯到第一年。
https://stackoverflow.com/questions/40973511
复制相似问题