【问题标题】:Unable to get difference between 2 dates in required format无法以所需格式获取 2 个日期之间的差异
【发布时间】:2020-06-04 06:34:14
【问题描述】:

我的开始和结束列的格式为Yyyy-mm-dd HH:mm:ss.ms 我想要HH:mm:ss.ms 格式的两者之间的区别。我该怎么办?

我的查询如下所示:

select *, convert(time, 
        Dateadd(s, 
            Datediff(s, A.Finish, A.Start), 
            Cast('1900-01-01 00:00:00.000000' as datetime2)
        )
    ) as dif 
from (
    select *,
        dateadd(s,convert(int,left(start,10)),'1970-01-01') as Start,
       dateadd(s,convert(int,left(finish,10)),'1970-01-01') as Finish,     
    from tableB
) A 
order by dif asc

我已在内部查询中将 unix 时间戳转换为标准格式。当我运行此程序时,开始日期和开始时间显示为“2019-12-11 15:45:20.000”和“2019-12-12 15:45:17.000”,但我的差异显示为“00:00:03”,这是错误的。

任何帮助将不胜感激

【问题讨论】:

  • 日期没有格式,它们是二进制值。没有如果或但关于这一点。 在您将该二进制值转换为字符串或解析字符串以获取日期时应用格式。要格式化,请使用CONVERTFORMAT 将日期格式化为您想要的格式
  • @PanagiotisKanavos 我用过转换
  • 顺便说一句,您也不需要 Unix 时间戳,除非您用 C 编写或使用 SQLite 并且不使用任何日期类型。所有其他数据库都有日期类型。使用 Unix 时间戳使您的代码可移植且更难阅读。
  • @PanagiotisKanavos 几列中的数据是 Unix 时间戳,所以我必须将它们转换为正常的日期时间格式。对于表中已经存在的 Unix 格式,我无能为力,它来自上游。
  • 如果您需要帮助,请发布 实际 表架构和示例数据。 YouStoring 整数而不是日期是 not 常见的(实际上这是一个严重的错误),所以没有人会期望日期以这种方式存储。为什么要使用 两个 epoch?您是否存储了不同类型的时间戳?

标签: sql sql-server tsql date-arithmetic


【解决方案1】:

我使用了两个资源来帮助您:

https://www.rodolforodarte.com/2011/05/using-datediff-to-display-hhmmss/

Show datediff as seconds, milliseconds

这是我的结果代码:

DECLARE @START_DATE DATETIME
DECLARE @END_DATE   DATETIME
SET     @START_DATE = '2011-01-01 16:00:22.000'
SET     @END_DATE =   '2011-01-01 22:47:21.022'

SELECT    CONVERT(varchar(6), DATEDIFF(MILLISECOND, @START_DATE, @END_DATE)/3600000)
+ ':'
+ RIGHT('0' + CONVERT(varchar(2), (DATEDIFF(MILLISECOND, @START_DATE, @END_DATE) % 3600000) / 60000), 2)
+ ':'
+ RIGHT('0' + CONVERT(varchar(2),   ((DATEDIFF(MILLISECOND, @START_DATE, @END_DATE) % 3600000) % 60000) / 1000), 2)
+ ':'
+ RIGHT('000' + CONVERT(varchar(2), (((DATEDIFF(MILLISECOND, @START_DATE, @END_DATE) % 3600000) % 60000) % 1000)), 3) AS 'HH:MM:SS:MS'

And here is a small demo

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2017-03-27
相关资源
最近更新 更多