Уже упоминалось, что ваши варианты (2) и (3) представляют собой экзистенциальную проблему для решения этой проблемы.Таким образом, этот ответ игнорирует эту проблему.
SQL Server довольно хорошо разбирается в датах.Итак, вы можете попробовать:
select try_convert(date, col)
Это вернет NULL
значения для неизвестных форматов даты.Вы также можете искать конкретные форматы:
select coalesce(try_convert(date, col),
try_convert(date, col, 101),
try_convert(date, col, 104),
try_convert(date, col, 120),
. . .
)
Выражения могут быть более сложными, чем try_convert()
, если вам нужно изменить значение строки перед попыткой преобразования.