为什么TRY_CAST仅适用于某些记录

时间:2018-10-15 07:31:28

标签: tsql datetime try-catch

我在存储日期的Varchar字段上使用了TRY_CAST(我知道这是不好的作法,但我无能为力)。

将值12/05/2018 04:30输出为2018-12-05 04:30:00.000,这是不正确的,因为在英国这里12/05/2018是5月12日,但是TRY_CAST输出12月5日的值。

TRY_CAST不会返回29/05/2018 07:00(5月29日)的任何值,因为我认为它认为它不存在29个月的第5个月。

,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 :(得分:3)

使用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);