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)
Run Code Online (Sandbox Code Playgroud)
回报
0 1752-01-04 NULL 1752-01-04 NULL
Run Code Online (Sandbox Code Playgroud)
将日期更改为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
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 13
如文档中所述,最早的datetime
值为'1753-01-01'.
我建议你try_convert()
改用.这为您提供了更多灵活性:
try_convert(date, '17521231') is not null
Run Code Online (Sandbox Code Playgroud)
该date
数据类型可以追溯到一年.