2016-08-23 72 views
2

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

我想这

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

我需要广告23小时59分钟,但我的代码只添加小时。为什么?

+0

DATEADD和23.59 * 60?或者在DATEADD上打两个电话? (一个小时,一个分钟) – MatBailie

+3

如果这是为了定义一段时间的终点,你应该知道,计算一个独占终点通常非常容易*并且使用'<'而不是'<=' )而不是计算包含端点。例如。目前你打算在当天的最后一分钟排除发生的任何事情吗? –

回答

3

这个怎么样?

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

数学救援! –

+0

谢谢我试过这个如何分割来自数据库23.59的浮点值,它会验证它可以有任何值,如20,18.30 15.22我如何乘以小时部分像23 * 60并添加分钟59 –

1

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

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

datepart的说法,你的情况hh,是整数被添加到哪个日期的一部分。所以DATEADD函数只是忽略输入的任何小数部分。

为了得到结果,你想要的,你必须要么使用DATEADD两次,增加23小时,然后59分钟,或一天添加到您的日期和减去1分,这样的:

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

另请参阅Microsoft's documentation on DATEADD

+0

谢谢托比,我编辑了我的答案,希望它回答他的问题。 – Oleg

0

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

输出做的是同样的

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

使用下面的代码添加时间部分的日期。

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

enter image description here

微小
相关问题