tsql - 为什么 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
将这些输出为有效的英国日期时间/的最佳方法是什么
解决方案
使用 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);
推荐阅读
- azure-functions - 配置 ADAL 时的 Pulumi AD Application 和 Azure Function 循环依赖
- python - Python if 语句无法识别蓝牙信标
- three.js - 有什么方法可以处理 AR.js / A-Frame 中的多个多标记区域?
- sql-server - 从 xml 获取值到关系表
- spring-boot - Swagger-ui 错误 HttpMediaTypeNotAcceptableException
- python - Python Elasticsearch:如何处理很长的查询字符串
- node.js - NPM node-sass 安装失败
- java - 是否可以确定发出 api 请求的机器的本地时间?
- c# - ServiceStack - SessionAs 导致 PreAuthenticate 被调用
- python - 如何按索引在多列中绘制带有散点图的数据框?