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,

Другие вопросы по тегам