首页 > 解决方案 > 为什么 TRY_CAST 仅适用于某些记录

问题描述

我在存储日期的 Varchar 字段上使用了 TRY_CAST(我知道不好的做法,但我无法控制)。

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

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

上面的字段是我要输出的

以下是原始存储值的一些示例数据,所有这些数据都是英国(5 月)日期。

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

将这些输出为有效的英国日期时间/的最佳方法是什么

标签: tsqldatetimetry-catch

解决方案


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

推荐阅读