如何将 YYMMDDhhmm 格式的 NVARCHAR 转换为 YYYY-MM-DD hh:mm:ss 格式的 DATETIME?

How to convert YYMMDDhhmm formatted NVARCHAR into YYYY-MM-DD hh:mm:ss formatted DATETIME?

提问人:K H A N 提问时间:1/1/2023 最后编辑:John CappellettiK H A N 更新时间:1/25/2023 访问量:102

问:

例如:

值 (nvarchar) 需要转换为 (datetime)。22081116032022-08-11 00:00:00

到目前为止,我尝试过的事情以及我遇到的相应错误如下:

CAST(DATE_TIME AS numeric)有效,但返回 Arithmetic Overflow Error。CAST(CAST(DATE_TIME AS numeric) AS datetime)

convert(datetime2, CAST(DATE_TIME AS numeric), 105)返回

不允许从数据类型 numeric 到 datetime2 的显式转换

CONVERT(datetime2, DATE_TIME , 105)返回

从字符转换日期和/或时间时转换失败 字符串。

CONVERT(datetime2, CONVERT(CHAR(10), DATE_TIME), 105)返回

从字符转换日期和/或时间时转换失败 字符串。

最后,我尝试了,结果PARSE(DATE_TIME AS date USING 'en-US')

将字符串值“2208111603”转换为数据类型日期时出错 区域性“en-US”。

SQL Server 的函数还具有一些内置格式,作为将 varchar 转换为日期时间的第三个参数。所以,我尝试了,结果出现了同样的错误(消息 241):CONVERTSELECT convert(datetime,'2208111603',112)

从字符转换日期和/或时间时转换失败 字符串。

任何帮助将不胜感激!

sql-server 强制 类型转换

评论

1赞 Abbas Aryanpour 1/1/2023
如何从???为什么不呢?部分的结尾是什么?2022-08-11 00:00:0022081116032208111922-08-111603
2赞 K H A N 1/1/2023
我只是在打字回复你,@John进来解决了问题。但感谢您的考虑。
2赞 Dan Guzman 1/1/2023
“2208111603(nvarchar) 需要转换为 2022-08-11 00:00:00(datetime)” - 请注意,这是一个没有格式的二进制结构。您希望将“2208111603”转换为(应用程序确定值的显示方式)。datetimedatetime
1赞 K H A N 1/25/2023
@JohnCappelletti 对不起,这是一个错误

答:

1赞 John Cappelletti 1/1/2023 #1

只需一点点字符串操作......

注意:这将假设 20 世纪

Declare @S varchar(50) ='2208111603'

Select try_convert(datetime,stuff(stuff(@S,7,0,' '),10,0,':'))

结果

2022-08-11 16:03:00.000

有点丑,但要克服世纪指标,你一个嵌套一点逻辑,有条件地加19。

Declare @S varchar(50) ='6408111603'

Select try_convert(datetime,case when left(@S,2)>'50' then '19' else '' end + stuff(stuff(@S,7,0,' '),10,0,':'))