SQL ISDATE возвращает false для строки, отформатированной как ISO, с часовым поясом (127)
Я пытаюсь взять строку, определить, является ли она датой (дата или время), а затем преобразовать ее в соответствующий тип данных с помощью констант формата преобразования SQL-сервера. Тем не менее, у меня много проблем с 127 "гггг-мм-ддТтч: ми: сс.мммЗ", так как ISDATE возвращает false для строки, отформатированной таким образом.
SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false
Это почему? И есть ли какая-либо сборка в функции сервера sql, о которой я не знаю, которая может проверить, является ли это допустимой строкой даты?
1 ответ
isdate
Функция принимает определенные даты (в зависимости от формата даты и языка), но никогда datetimeoffset
, Смещение является -06:00
часть в конце вашего примера.
Вы могли бы использовать try_convert
со стилем 120 (yyyy-mm-dd hh:mi:ss(24h)
ODBC канонический) вместо:
SELECT TRY_CONVERT(datetimeoffset, '2018-07-21 15:14:00.5206914 -06:00', 120);
-->
2018-07-21 15:14:00.5206914 -06:00
try_convert
функция вернется null
если переданное выражение недопустимо datetimeoffset
,