0

SQL テーブルに varchar 型の列があり、そこから作業時間を収集しています...

WorkingHours
------------
     1
     5
     8

のようにこの WorkingHours 列の値の合計を見つけることができますが、Sum(WorkingHours)ここでは、次のようなより具体的なタイミングを指定する必要があります

WorkingHours
------------
    01:30
      2
    01:15
    04:45

このように、これらの値を合計することは可能ですか、私は同じ方法を試しましたが、解決策を思い付くことができませんでした.誰かが私を助けてくれます....

4

2 に答える 2

2

時間を varchar として保存するのはなぜですか? もちろん、timeまたはdatetimeを使用してください...

変換可能な場合、「2」は 48 時間または 2 日になることに注意してください。データまたはデータ型を修正したくない場合は、これを回避する必要があります

DECLARE @feckedTable TABLE (WorkingHours varchar(5));

INSERT @feckedTable (WorkingHours) VALUES ('01:30'), ('02:00'), ('01:15'), ('04:45');

SELECT
    SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
FROM
    @feckedTable

SELECT
    CAST(TotalTime/60 AS varchar(4)) + ':' + CAST(TotalTime % 60 AS char(2))
FROM
    (
    SELECT
        SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
    FROM
        @feckedTable
    ) X
于 2012-05-22T06:50:45.987 に答える
1

テーブルから cast(dateadd(millisecond,sum(datediff(millisecond,0,cast(totalhrs as datetime))),0) as time) を選択します

これは、ミリ秒までの精度を得るための構文です。

詳細な説明については、このソリューションを参照してください。

于 2012-05-22T06:29:15.333 に答える