SQL选择 HH:MM - HH:MM

3
我正在尝试编写一条SQL查询语句,以如下方式返回当前时间:
HH:MM - HH:MM (+1)
例如,如果时间是14:00,则应返回14:00 - 15:00。
我已经成功地完成了以下部分:
SELECT TOP (30) 
    DATEADD(HOUR, DATEDIFF(HOUR, 0, QUEUE_TIME.QueueDate), 0) AS 'DateAdded',
    CAST(CONVERT(VARCHAR(2), DATEPART(HH, QUEUE_TIME.QueueDate), 108) AS VARCHAR(2)) + ' - ' + 
    CAST(CONVERT(VARCHAR(2), DATEPART(HH, QUEUE_TIME.QueueDate), 108) + 1 AS VARCHAR(2)) AS Interval, 
    QUEUE_TYPE.Name, QUEUE_TIME.QueueTypeId, 
    MAX(QUEUE_TIME.QueuedTimeInSec / 60) AS 'WaitingTimeInSec', 
    CAST(ROUND(AVG(QUEUE_TIME.FlowRateWhenJoinedPerMin), 1) AS numeric(36, 2)) AS AvgFlowRate
FROM
    QUEUE_TIME 
INNER JOIN
    QUEUE_TYPE ON QUEUE_TIME.QueueTypeId = QUEUE_TYPE.Id
WHERE
    (QUEUE_TIME.QueueDate >= '11/07/2014 00:00') 
    AND (QUEUE_TIME.IsFreeFlowing = '0') 
    AND (QUEUE_TIME.QueueTypeId = '3')
GROUP BY 
    DATEADD(HOUR, DATEDIFF(HOUR, 0, QUEUE_TIME.QueueDate), 0), 
    DATEPART(HOUR, QUEUE_TIME.QueueDate), QUEUE_TYPE.Name, QUEUE_TIME.QueueTypeId
ORDER BY 
    'DateAdded'

这将返回如下结果,例如如果是早上8点,它将返回8-9。但我需要它的格式为08:00 - 09:00。
任何帮助都将不胜感激。
我正在使用SQL Server 2008。
谢谢
2个回答

3

这是一个例子,你可以用列名替换@now变量:

declare @now datetime = getdate()

select convert(varchar(5), @now, 114) + ' - ' + 
       convert(varchar(5), dateadd(hour, 1, @now), 114) yourColumn

SQL Fiddle演示


如果您使用的是较旧版本的SQL Server,则可能需要将“= getdate()”移到第二行。 - Mike M
@MikeM 是的,在SQL Server 2008及之后的版本中,可以在同一行中分配默认值。 - Kaf
好答案...我以前没有用过114 :) - Mike M

2

使用SQL Server 2012+的FORMAT进行尝试:

SELECT FORMAT(GETDATE(), 'HH:mm') + '-' + FORMAT(DATEADD(HH, 1, GETDATE()), 'HH:mm')

(如果在 SQL Server 2012 或 2014 中)...(但 OP 说是 2008) - Mike M
啊,是的。读完一篇文章很好。感谢您的纠正,@MikeM。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接