将INT转换为TIME并获取下一小时或半小时的值

时间:2019-01-24 06:05:02

标签: sql sql-server-2008-r2

我正在使用以下查询将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

2 个答案:

答案 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) 
相关问题