SQL 日期转换 HHMMSS.CCCNNNNNN to yyyy-mm-dd hh:mi:ss.mmm.



我有这种格式的数据:114643.052303537(HHMMSS.CCCNNNNNN(。

我需要将其转换为这种格式:2018-04-2512:40:59.573 (yyyy-mm-dd hh:mi:ss.mmm(,日期部分的条带(即 2018-04-25 (并计算两种格式之间的时差。

你能帮忙吗?

我需要hh:mi:ss.mmm格式的时差

获得此值的方法是将两个值转换为毫秒(仅查看具有日期的值的时间部分(;用简单的减法计算差值,然后使用除法和模运算将结果转换为hh:mi:ss.mmm。

declare @dt datetime = '2018-04-25 12:40:59.573'
declare @dunno varchar(16) = '114643.052303537'

从日期时间中删除日期并给出今天的日期

getdate() + right(convert(varchar,@dt,113),12)

将变量转换为时间并为其提供今天的日期

getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8)

找到它们之间的毫秒数

datediff(millisecond,getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8),getdate() + right(convert(varchar,@dt,113),12))

以您的格式将所有内容放在一起

select
convert(char(13),
dateadd(millisecond,
datediff(millisecond,getdate() + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8),getdate() + right(convert(varchar,@dt,113),12)),
'01/01/00'),
14)

根据服务器和其他代码的速度,明智的做法是在开始时使用变量进行GETDATE(),以防止在转换过程中出现毫秒甚至秒的差异。

declare @dt datetime = '2018-04-25 12:40:59.573'
declare @dunno varchar(16) = '114643.052303537'
declare @today datetime = getdate()
declare @dunno2 datetime
declare @dt2 datetime
set @dt2 = @today + right(convert(varchar,@dt,113),12)
set @dunno2 = @today + left(stuff(stuff(@dunno,3,0,':'),6,0,':'),8)
select
convert(char(13),
dateadd(millisecond,
datediff(millisecond,@dunno2,@dt2),
'01/01/00'),
14)

最新更新