0

Time_Summary というテーブルがあり、データは次のように表示されます。

A_Date                         A_Interval            Acc_name
2012-05-06 00:00:00.000        0530                  Nick
2012-05-06 00:00:00.000        0600                  Nick
2012-05-06 00:00:00.000        0630                  Nick
2012-05-06 00:00:00.000        0700                  Nick
2012-05-06 00:00:00.000        0800                  Nick

出力を次のようにします。

A_Date                         A_Interval                    Acc_name
2012-05-06 00:00:00.000        05:30 - 05:59                  Nick
2012-05-06 00:00:00.000        06:00 - 06:29                  Nick
2012-05-06 00:00:00.000        06:30 - 06:59                  Nick
2012-05-06 00:00:00.000        07:00 - 07:29                  Nick
2012-05-06 00:00:00.000        08:00 - 08:29                  Nick

私はこのようなものを書こうとしていました:

Select A_Date,
Case When A_Interval = '0530' then '05:30 - 05:59' End as A_Interval
from Time_Summary

しかし、そのようにすることで、1日に24回の間隔があるため、24個のケースステートメントを作成する必要があります.

そのようにする別の方法はありますか?

4

2 に答える 2

2

A_Interval常にそのように見える場合、これは機能するはずです:

SELECT  A_Date,
        LEFT(A_Interval,2) + ':' + RIGHT(A_Interval,2) + ' - ' + LEFT(A_Interval,2) + ':' +
        CASE WHEN RIGHT(A_Interval,2) = '30' THEN '59' ELSE '29' END A_Interval,
        Acc_name
FROM Time_Summary
于 2012-05-07T15:23:49.247 に答える
1

これはうまくいくはずです:

with cte as(
    select  A_Date
    ,       A_Interval
    ,       Acc_name
    ,       CAST(SUBSTRING(A_Interval,1,2)AS INT) AS Hour
    ,       CAST(SUBSTRING(A_Interval,3,2)AS INT) AS Minute
    ,       DATEADD(minute, 
                CAST(SUBSTRING(A_Interval,3,2)AS INT), 
                    DATEADD(hour,
                        CAST(SUBSTRING(A_Interval,1,2)AS INT), 
                        A_Date))as RealTime
    FROM Time_Summary
)
SELECT  A_Date
      , RIGHT('00' + CAST(Hour AS varchar(2)),2) + ':' 
      + RIGHT('00' + CAST(Minute AS varchar(2)),2) + ' - ' 
      + RIGHT('00' + CAST(DATEPART(hh,DATEADD(mi,29,RealTime)) AS varchar(2)),2) + ':' 
      + RIGHT('00' + CAST(DATEPART(mi,DATEADD(mi,29,RealTime)) AS varchar(2)),2) AS A_Interval 
      , Acc_name
FROM cte

結果:

A_Date                     A_Interval          Acc_name
2012-05-06 00:00:00.000    05:30 - 05:59       Nick
2012-05-06 00:00:00.000    06:00 - 06:29       Nick
2012-05-06 00:00:00.000    06:30 - 06:59       Nick
2012-05-06 00:00:00.000    07:00 - 07:29       Nick
2012-05-06 00:00:00.000    08:00 - 08:29       Nick

簡単にするためにcteを使用したことに注意してください。

于 2012-05-07T15:24:26.813 に答える