【问题标题】:difference between dates in hours以小时为单位的日期之间的差异
【发布时间】:2013-09-15 23:32:09
【问题描述】:

我已经搜索了很多主题,但找不到我需要的答案。我有两个日期时间列:

BOOKDATIME                BOOKDATIME_OFF 
2013-06-01 12:14:00.000   2013-06-03 07:09:00.000  

我想要做的只是显示两个日期之间的总小时和分钟差。

当我使用时:

CONVERT(TIME, BOOKDATIME_OFF - BOOKDATIME) 
                  AS HourMinuteSecond

我收到错误消息:无法按时调用方法

【问题讨论】:

  • 你可以使用DATEDIFF
  • 在 SQL Server 中允许减去两个 datetime 值并转换为 time。你能显示产生错误的整个查询吗?

标签: sql sql-server date time


【解决方案1】:
DATEDIFF(HH,BOOKDATIME, BOOKDATIME_OFF)

【讨论】:

【解决方案2】:

您可以使用DATEDIFF() 和除法/模除法来获得总小时/分钟的差异:

SELECT Hours = DATEDIFF(Minute,'2013-06-01 12:14:00.000','2013-06-03 07:09:00.000')/60
      ,Minutes = DATEDIFF(Minute,'2013-06-01 12:14:00.000','2013-06-03 07:09:00.000')%60

如果DATETIME 字段总是相隔不到一天,那么您也可以减去日期时间并转换为时间:

DECLARE @date DATETIME = GETDATE()
       ,@date2 DATETIME = DATEADD(MINUTE,25,GETDATE())
SELECT CAST(@date2 - @date AS TIME)

【讨论】:

  • 感谢添加小时差,但计算错误(它有一个额外的小时,因为 datediff 将 '09:59:59' 和 '10:00:00' 之间的小时差计算为1)。您应该取微小的差异并除以 60
  • 另外,请不要使用'single quote column aliases' - 这种语法在某些形式中已被弃用,并且还会使这些别名看起来像字符串文字。 [square brackets] 更可取,恕我直言,并且仅在实际需要时。
  • 当差异大于 23:59:59.99999999 小时时,“cast as time”部分将中断(因此它不适用于 OP 的示例)
  • 刚刚注意到,这似乎是一个警告,而不是需要做出改变。
  • @AaronBertrand 不确定我是否同意这一点,我喜欢在我的代码中突出显示单引号别名的方式,似乎从来没有让我的同行感到困惑,但会考虑一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
相关资源
最近更新 更多