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

Posted

技术标签:

【中文标题】SQL 日期转换 HHMMSS.CCCNNNNNN 到 yyyy-mm-dd hh:mi:ss.mmm【英文标题】:SQL date conversion HHMMSS.CCCNNNNNN to yyyy-mm-dd hh:mi:ss.mmm 【发布时间】:2018-05-30 16:52:09 【问题描述】:

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

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

你能帮忙吗?

【问题讨论】:

提供你目前尝试过的,为什么标签里有“C”? 目前还不清楚114643 部分如何变成12:40:59。也不清楚“计算两种格式之间的时间差”是什么意思。 “两个值之间的差异”是有道理的。但是将值从一种格式转换为另一种格式不应该改变时间,除非精度会丢失。 2018-04-25 12:40:59.573 是 084059.348708957(相差 4 小时)。 我认为你的措辞混淆了这个问题。您不应该谈论转换,如果我理解正确,您只需要两种不同格式之间的时间差。你想要什么格式的差异?根据样本数据,期望的结果是什么? 现在你让我更加困惑了。 084059 是从哪里来的? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:
declare @dt datetime = '2018-04-25 12:40:59.573'
declare @dunno varchar(16) = '114643.052303537'

从日期时间中去掉日期并给出今天的日期

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

将 varchar 转换为时间并给出今天的日期

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)

【讨论】:

以上是关于SQL 日期转换 HHMMSS.CCCNNNNNN 到 yyyy-mm-dd hh:mi:ss.mmm的主要内容,如果未能解决你的问题,请参考以下文章

sql怎么把字符串转换为日期格式

sql字符串转换成日期

sql字符串转换日期

SQL 怎么将日期时间格式转换成日期

sqlServer日期函数转换成短日期

SQL将日期时间转换为日期名称