如何在sql server中将时间戳字符串转换为日期时间



我在sql server中对1-2个月前的数据进行了一些数据检查,脑海中出现了一个问题。

我制作了一个字符串92608471114020210926084711140,我认为这是一个日期时间戳。

我想转换成实际的日期时间值。所以我尝试了这个:

'2021-' + SUBSTRING(CAST(th.edit_timestamp as varchar(50)),1,1) + '-' + SUBSTRING(CAST(th.edit_timestamp as varchar(50)),2,2)

这返回了一个值2021-09-.2,我无法理解这个输出。

我想过做子字符串,但到目前为止失败了。

有人能帮忙吗?如有任何帮助,我们将不胜感激。

谢谢!

正如其他人所说,你应该修复你的数据模型,但这里有一个替代方法:

Select cast(stuff(stuff(stuff(stuff(@date, 15, 0, '.'), 13, 0, ':'), 11, 0, ':'), 9, 0, ' ') as datetime)

如果你真的有没有年份的第一个日期格式,你可以这样做:

Select cast(stuff(stuff(stuff(stuff(concat('2021', right(concat('0', @date), 13)), 15, 0, '.'), 13, 0, ':'), 11, 0, ':'), 9, 0, ' ') as datetime)

我要告诉你的第一件事是:不要使用这种格式。你必须修复数据输入,不要试图修复数据输出

但如果没有其他办法。。。我假设你的格式是aaaa mm ddThh:mi:ss.mm

我们可以做一些类似的事情

select convert(datetime,'2021-09-26T08:47:11.140',126)

输出:2021-09-26 08:47:111.140

declare @date varchar(50) = '20210926084711140'
select convert(datetime,substring(@date,1,4) + '-' + substring(@date,5,2) + '-' 
+ substring(@date,7,2) + 'T' + substring(@date,9,2) + ':' + 
substring(@date,11,2) + ':' + substring(@date,13,2) + '.' + 
substring(@date,15,3),126)

再来一次。。。这太可怕了。

尝试修复你的数据源,不要使用它。

祝好运

最新更新