2016-09-29 47 views
0

私はSSRSレポートを作成しており、テーブルに時間ごとのデータ数を表示する必要があります。 時間間隔は、午後4時から午後5時まで表示する必要があります。 私は、各トランザクションでDateTimeを利用できるログテーブルを持っています。この表は毎日リフレッシュされます。 このタイムスタンプの時間コンポーネントをグループ化して、時間単位のカウントを取得しています。 時間単位の値を04:00 - 05:00の形式に変換するためのSQL/SSRSで使用できるオプションはありますか?T-SQLの時間間隔の日付時間

+0

は、カウント、または列名を変換しますか?それは両方で実行可能ですが、私はあなたがSSRSでタブリックスのヘッダーを変更する方法を知っていると確信しています。少し詳しく説明できますか? – scsimon

+0

私はRight(100 + datepart(時)、getdate())、2)を試しましたが、それは私に0から23の値を与えます – viky

+0

そして、あなたが望む値にdatetimeを変換する方法はありませんか? – 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 

コーナーケース(午後11時)の場合は、ネストされたケースステートメントを使用してAM/PMを扱います。 datepartをチェックし、結果に基づいてam/pmを返します。私はスマートフォンからこれを投稿しているので、クエリをテストすることができませんでした。

希望します。

+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

私はあなたは、単にこの1のための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());