SQL Server 2012 ISDATE()
В документе MS указано, что ISDATE()
Возвращает 1, если выражение является допустимым значением даты, времени, или datetime; в противном случае 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
Как объясняется в документации, самое раннее значение datetime
- "1753-01-01".
Я бы предположил, что вместо этого вы используете try_convert()
. Это дает вам большую гибкость:
try_convert(date, '17521231') is not null
Тип данных date
возвращается в первый год.