【问题标题】:Convert 16-digit datetime string to datetime with microseconds将 16 位日期时间字符串转换为以微秒为单位的日期时间
【发布时间】:2022-02-09 00:33:24
【问题描述】:

我正在尝试将 SQL Server 中的 16 位日期时间字符串(以毫秒为单位)转换为实际的日期时间以及毫秒。例如,将这样的记录更改为2022020804180454,以读取美国日期时间02/08/2022 04:18:04.54。

我该怎么做呢? Google/Bing 搜索表明日期带有午夜时间戳

CONVERT(datetime, CAST('2022020804180454' AS CHAR(8)), 101)

这不是我想要的。

任何帮助或指出正确的方向都会有所帮助。

【问题讨论】:

  • @marc_s 感谢您清理该帖子。现在更具可读性。

标签: sql sql-server tsql datetime


【解决方案1】:

您可以使用方便的DATETIMEFROMPARTS:

DECLARE @s nvarchar(16) = '2022020804180454';


SELECT DATETIMEFROMPARTS(LEFT(@s,4), --year
                         SUBSTRING(@s,5,2), --month
                         SUBSTRING(@s,7,2), --day
                         SUBSTRING(@s,9,2), --hour
                         SUBSTRING(@s,11,2), --minute
                         SUBSTRING(@s,13,2), --second
                         SUBSTRING(@s,15,2)*10 --millisecond
                         )

【讨论】:

    【解决方案2】:

    注入所需的字符,使用STUFF,然后然后转换:

    SELECT CONVERT(datetime2(2),STUFF(STUFF(STUFF(STUFF(V.YourDateString,15,0,'.'),13,0,':'),11,0,':'),9,0,' '))
    FROM (VALUES('2022020804180454'))V(YourDateString);
    

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2020-10-24
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多