如何在SQL中的每小时报告中打印小时值

时间:2015-11-19 00:02:20

标签: sql sql-server

我通过SQL Query从SQL表CONFIRMATION构建每小时报告。查询绝对运行正常并给出正确的结果如下:

SELECT DATEPART(hh, CONFIRMATION.DATECOMPLETE) AS hour, sum( CONFIRMATION.QUANTITY) Units
FROM  CONFIRMATION 
WHERE  CONFIRMATION.DATECOMPLETE >= '11/18/2015'
GROUP BY DATEPART(hh,   CONFIRMATION.DATECOMPLETE)

我想将小时改为以下而不是小时数:

Hour                  Units
10:00 - 11:00         4
11:00-12:00           8

我怎样才能做到这一点?

由于

2 个答案:

答案 0 :(得分:2)

您可以将日期时间组件转换为字符串以格式化10:00-11:00。然后,您可以通过在小时组件中添加1来计算结束时间,并在午夜时将模24加起来。

CONVERT(varchar(2),DATEPART(hh,CONFIRMATION.DATECOMPLETE)) + ':00-' + CONVERT(varchar(2), (DATEPART(hh,CONFIRMATION.DATECOMPLETE)+1) % 24) + ':00'

答案 1 :(得分:1)

使用连接将部分日期放在一起时,datename()datepart()要好得多:

SELECT (DATENAME(hour, c.DATECOMPLETE) + ':00-' +
        DATENAME(hour, DATEADD(hour, 1, c.DATECOMPLETE)) + ':00'
       ) as period,
       SUM(c.QUANTITY) as Units
FROM CONFIRMATION c
WHERE c.DATECOMPLETE >= '2015-11-18'
GROUP BY (DATENAME(hour, c.DATECOMPLETE) + ':00-' +
          DATENAME(hour, DATEADD(hour, 1, c.DATECOMPLETE)) + ':00'
         );

另外:

  • 使用ISO标准日期格式。 YYYY-MM-DD或YYYYMMDD。
  • 表别名使查询更易于编写和阅读。