Почему TRY_CAST работает только для некоторых записей - PullRequest
0 голосов
/ 15 октября 2018

Я использовал TRY_CAST для поля Varchar, в котором хранятся даты (я знаю плохую практику, но ничего не могу контролировать).

Значение 12/05/2018 04:30 выводится как 2018-12-05 04: 30: 00.000, что неверно, так как здесь, в Великобритании, 12/05/2018 - 12 мая, однако TRY_CAST выводит значение 5 декабря

TRY_CAST не возвращает никакого значенияна 29/05/2018 07:00 (29 мая), поскольку я предполагаю, что 5-го числа 29-го месяца, которого не существует.

,TRY_CAST([Time decision made for caesarean section].VALUE as datetime)
    AS DECISION_FOR_CAESAREAN_SECTION_DATE_TIME

Поле выше - это то, что я пытаюсь вывести

Ниже приведены некоторые примеры данных из исходных сохраненных значений, все из которых являются датами Великобритании (май).

22/05/2018 07:30
12/05/2018 04:30
22/05/2018 00:51
16/05/2018 10:08
21/05/2018 13:03
17/05/2018 11:53
21/05/2018 14:22
29/05/2018 07:00

Каков наилучший способ вывести их в качестве действительных дат Великобритании /

1 Ответ

0 голосов
/ 15 октября 2018

Используйте TRY_CONVERT, который предлагает опцию стиля, которую TRY_CAST не делает

SELECT 
   TRY_CONVERT(datetime, '12/05/2018 04:30', 103), 
   TRY_CONVERT(datetime, '22/05/2018 07:30', 103),
   TRY_CONVERT(datetime, 'gbn', 103)

Стиль 103 влияет только на часть даты.

В качестве альтернативы, вы можете сначала использовать SET DATEFORMAT dmy

SET DATEFORMAT dmy
SELECT
    TRY_CAST('12/05/2018 04:30'AS datetime),
    TRY_CAST('22/05/2018 07:30'AS datetime),
    TRY_CAST('gbn'AS datetime);
...