我有这种格式的数据: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)