如何在单个查询中添加小时和分钟

时间:2016-08-23 11:59:10

标签: sql sql-server

如何在单个查询中添加小时和分钟?

我试过这个

Select DATEADD(hh,23.59,CAST('2016-07-08' AS DATETIME))

我需要投放23小时59分钟,但我的代码只会增加小时数。为什么呢?

5 个答案:

答案 0 :(得分:4)

这个怎么样?

Select DATEADD(minute, 23*60 + 59, CAST('2016-07-08' AS DATETIME))

编辑:

如果你得到一个浮动/十进制值,如23.59,那么你可以这样做:

Select DATEADD(minute, FLOOR(@hhmm) * 60 + (@hhmm - FLOOR(@hhmm)) * 100, CAST('2016-07-08' AS DATETIME))

注意:您也可以使用:

Select DATEADD(minute, FLOOR(@hhmm) * 60 + (@hhmm % 1) * 100, CAST('2016-07-08' AS DATETIME))

但我发现模数运算符的这种用法略显偏离。

答案 1 :(得分:1)

您还可以使用DATEADD()两次:

 Select DATEADD(minute,59,DATEADD(hh,23,CAST('2016-07-08' AS DATETIME)))

答案 2 :(得分:1)

datepart参数(在您的情况下为hh)是添加整数的日期的一部分。因此DATEADD函数只会忽略输入的任何小数部分。

要获得您想要的结果,您需要使用DATEADD两次,添加23小时然后59分钟,或者将一天添加到您的日期并减去1分钟,如下所示:

Select DATEADD(MI, -1, CAST('2016-07-08' AS DATETIME) + 1)

另见Microsoft's documentation on DATEADD

答案 3 :(得分:0)

另一种方法:你可以通过添加一天然后减去分钟来实现

输出相同

  select DATEADD(minute, -1, DATEADD(DAY, 1,CAST('2016-07-08' AS DATETIME)))

答案 4 :(得分:0)

使用以下代码将时间部分添加到日期。

SELECT DATEADD(Day, DATEDIFF(Day, 0, CAST('2016-07-08' AS DATETIME)), '23:59:00.000')

enter image description here