SQL Server 2012 ISDATE()

时间:2016-12-05 11:43:23

标签: sql sql-server

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

1 个答案:

答案 0 :(得分:13)

正如documentation中所述,最早的datetime值为' 1753-01-01'。

我建议你改用try_convert()。这为您提供了更大的灵活性:

 try_convert(date, '17521231') is not null

date数据类型可以追溯到第一年。