提问人:K H A N 提问时间:1/1/2023 最后编辑:John CappellettiK H A N 更新时间:1/25/2023 访问量:102
如何将 YYMMDDhhmm 格式的 NVARCHAR 转换为 YYYY-MM-DD hh:mm:ss 格式的 DATETIME?
How to convert YYMMDDhhmm formatted NVARCHAR into YYYY-MM-DD hh:mm:ss formatted DATETIME?
问:
例如:
值 (nvarchar) 需要转换为 (datetime)。2208111603
2022-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):CONVERT
SELECT convert(datetime,'2208111603',112)
从字符转换日期和/或时间时转换失败 字符串。
任何帮助将不胜感激!
答:
只需一点点字符串操作......
注意:这将假设 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,':'))
评论
2022-08-11 00:00:00
2208111603
220811
1922-08-11
1603
datetime
datetime