我正在使用以下查询将INT转换为时间。
DECLARE @TimeVal INT
SET @TimeVal = 115024
SELECT DATEADD(HOUR, (@TimeVal / 10000) % 100,
DATEADD(MINUTE, (@TimeVal / 100) % 100,
DATEADD(SECOND, (@TimeVal % 100), CAST('00:00:00' AS TIME(0)))))
它将给出结果11:50:24
。然后我需要将此时间值舍入到最近的小时或半小时值。这次输入的预期输出为12:00:00
。
样本输入和输出
11:15:12 -> 11:30:00
10:56:58 -> 11:00:00
22:01:59 -> 22:30:00
答案 0 :(得分:0)
请尝试一下
DECLARE @TimeVal INT
SET @TimeVal = 111512
SELECT DATEADD(HOUR,case when (((@TimeVal / 100) % 100)>30 and ((@TimeVal / 10000) % 100)<24) then ((@TimeVal / 10000) % 100)+1 else (@TimeVal / 10000) % 100 end,
DATEADD(MINUTE,case when ((@TimeVal / 100) % 100)>30 then 0 when ((@TimeVal / 100) % 100)<30 then 30 end,
DATEADD(SECOND, 0, CAST('00:00:00' AS TIME(0)))))
答案 1 :(得分:0)
我将数字转换为仅使用秒的时间:
convert(time, dateadd(second, (@timeval / 10000) * 60 * 60 + ((@timeval / 100) % 100) * 60 + @timeval % 100, 0))
然后,有多种方法可以进行四舍五入。我认为case
最简单:
(case when @timeval % 100 >= 30
then convert(time, dateadd(second, (@timeval / 10000) * 60 * 60 + ((@timeval / 100) % 100) * 60 + 60, 0))
then convert(time, dateadd(second, (@timeval / 10000) * 60 * 60 + ((@timeval / 100) % 100) * 60, 0))
end)