2016-09-29 48 views
0

我正在处理SSRS报告,我需要在表中显示每小时的数据计数。 每小时的时间间隔需要显示为下午4:00 - 下午5:00 我有一个日志表,每个事务都有DateTime。此表每天更新。 我在此时间戳的小时组件上分组以获得小时计数。 SQL/SSRS中是否有任何选项可用于将小时值转换为04:00 pm-05:00 pm格式?在T-Sql中的DateTime到时间间隔

+0

转换计数,或列名?这两个都是可行的,但我相信你知道如何改变SSRS中tablix的标题。你能详细说一下吗? – scsimon

+0

我试过右(100 + datepart(小时,getdate()),2),但它给我的值从0到23 – viky

+0

而且没有办法将日期时间转换为你想要的值? – dfundako

回答

0

使用case语句:

SELECT CASE 
      WHEN DATEPART(hour,TransactionDateTime) = 0 THEN '12:00am-01:00am' 
      WHEN DATEPART(hour,TransactionDateTime) = 1 THEN '01:00am-02:00am' ... 
     END FROM your_table 

动态方式:

SELECT CASE 
    WHEN DATEPART(hour,TransactionDateTime) >12 THEN cast (DATEPART(hour,TransactionDateTime) -12 as VARCHAR (2)) + ':00pm-' +cast(DATEPART(hour,TransactionDateTime) -11 as VARCHAR (2)) + ':00pm' 
    WHEN DATEPART(hour,TransactionDateTime) <12 
    cast (DATEPART(hour,TransactionDateTime) as VARCHAR (2)) + ':00am-' +cast(DATEPART(hour,TransactionDateTime)+1 as VARCHAR (2)) + ':00am' 
WHEN DATEPART(hour,TransactionDateTime) =12 
    cast (DATEPART(hour,TransactionDateTime) as VARCHAR (2)) +':00pm-1:00pm' 
    END 
    FROM your_table 

对于极端情况(23:00)手柄时使用嵌套case语句/分。检查日期部分并根据结果返回上午/下午。自从我通过智能手机发布此信息后,我无法测试该查询。

希望这有助于

+0

是否没有动态选项? – viky

0

使用下面的脚本日期时间换算成12小时格式。

SELECT LEFT (STUFF(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar,YourColumn,100),7)),7),6,0,''),2)+':00'+RIGHT (LTRIM(RIGHT(CONVERT(VARCHAR(20), YourColumn, 100), 7)),2) 
    +' - '+LEFT (STUFF(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar, DATEADD(hh, 1, YourColumn),100),7)),7),6,0,''),2)+':00'+RIGHT (LTRIM(RIGHT(CONVERT(VARCHAR(20), DATEADD(hh, 1, YourColumn), 100), 7)),2) 
    FROM YourTable 

输出示例:

enter image description here

+0

它仍然给我分钟组件,我需要00分钟 – viky

+0

使用更新的脚本。 –

0

我会建议您只需创建SQL Server中的简单的标量函数为这一个。见下面的例子:

CREATE FUNCTION DateTimeToHourInterval 
(
    @currentDateTime DATETIME 
) 
RETURNS VARCHAR(50) 
AS 
BEGIN 

    DECLARE @nextHourDateTime DATETIME = DATEADD(HOUR, 1, @currentDateTime); 

    DECLARE @intervalStart VARCHAR(10) = REPLACE(REPLACE(LTRIM(RIGHT(CONVERT(VARCHAR(50), DATEADD(MINUTE, -1* DATEPART(MINUTE, @currentDateTime), @currentDateTime), 100), 7)), 'PM', ' PM'), 'AM', ' AM'); 

    DECLARE @intervalEnd VARCHAR(10) = REPLACE(REPLACE(LTRIM(RIGHT(CONVERT(VARCHAR(50), DATEADD(MINUTE, -1* DATEPART(MINUTE, @nextHourDateTime), @nextHourDateTime), 100), 7)), 'PM', ' PM'), 'AM', ' AM'); 

    RETURN @intervalStart + ' - ' + @intervalEnd 

END 

功能现在可以使用如下:

SELECT dbo.DateTimeToHourInterval(GETDATE());