我想将日期时间四舍五入(还应该返回一个日期时间)到开始的小时数的开始,例如:
2018-09-22 11:31:42.411 -> 2018-09-22 11:00:00.000
2018-09-22 11:08:02.456 -> 2018-09-22 11:00:00.000
2018-09-22 11:52:08.005 -> 2018-09-22 11:00:00.000
有人可以帮忙吗?
答案 0 :(得分:3)
另一种方法是DATEADD
,DATEDIFF
:
SELECT DATEADD(HOUR, DATEDIFF(HOUR, '20000101',YourColumn),'20000101') AS RoundedValue
FROM YourTable;
答案 1 :(得分:1)
假设数据类型为DATETIME
或DATETIME2
,则可以使用以下常见技巧:
SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, yourdate), 0)
DATEDIFF(HOUR, 0, yourdate)
将为您提供从第零个日期到您的日期之间的小时数(没有其他时间)。当您将这些小时数加回到第零个日期时,您的日期就会“加满”到该小时数。
答案 2 :(得分:1)
您可以使用DATETIMEFROMPARTS()
函数。
select DATETIMEFROMPARTS(YEAR(@date),MONTH(@date),DAY(@date),DATEPART(HOUR,@date),00,00,00)
@date替换为YourColumn或任何变量。
答案 3 :(得分:0)
这会将值转换为字符串,剩余14个字符并添加00:00:00值
select left(convert(varchar , datecol, 121),14) + '00:00:00' as mydatecol from table