1

私は、ユーザーがステーションを選択し、2つの日付から選択してから、希望するシフトを選択できるようにプログラムを設定しています。彼らは両方、最初、または2番目を選ぶことができます。1つ目は6:00AM〜4:00PM、2つ目は4:00 PM〜3:00AMです。全部で4つのパラメータがあります。16から3までのすべての値が開始より大きく、終了より小さいわけではないため、私のプログラムは2番目のシフトの値を返さないと思います。たとえば、6:00PMは3の終了時間以上であるため、出力には含まれません。どうすればこれを達成できますか?これが私のコードです:

DECLARE @StartHour INT
DECLARE @EndHour INT
SET @StartHour = CASE @TimeRange 

WHEN 0 THEN 0 --Start of Overall--
WHEN 1 THEN 6 --1st Shif Start--
WHEN 2 THEN 16 --2nd Shift Start--
END

SET @EndHour = CASE @TimeRange   
WHEN 0 THEN 24 --End of Overall--
WHEN 1 THEN 16 --End of First Shift--
WHEN 2 THEN 3 --End of Second Shift--
END

SELECT
Testerline1_CycleTimes.Station,
Testerline1_CycleTimes.StationEntry

WHERE
Testerline1_CycleTimes.Station LIKE @Station
AND Testerline1_CycleTimes.StationEntry Between @Start And @End
AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= @StartHour
AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < @EndHour
4

1 に答える 1

1

最終日に答えることができませんでしたが、それでも問題を解決していない場合。2番目のシフトデータにユニオンを使用してみることをお勧めします。時間範囲を選択する際の日が変わると

/*******************************************************
   --Commented Code
    DECLARE @StartHour INT
    DECLARE @EndHour INT
    SET @StartHour = CASE @TimeRange 

    WHEN 0 THEN 0 --Start of Overall--
    WHEN 1 THEN 6 --1st Shif Start--
    WHEN 2 THEN 16 --2nd Shift Start--
    END

    SET @EndHour = CASE @TimeRange   
    WHEN 0 THEN 24 --End of Overall--
    WHEN 1 THEN 16 --End of First Shift--
    WHEN 2 THEN 3 --End of Second Shift--
   END 
  *******************************************/

 If(@TimeRange=1)
 BEGIN
 SELECT
    Testerline1_CycleTimes.Station,
    Testerline1_CycleTimes.StationEntry
 WHERE
    sterline1_CycleTimes.Station LIKE @Station
    AND Testerline_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 6
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 16
END

ELSE IF(@TimeRange=2)
BEGIN
SELECT
   Testerline1_CycleTimes.Station,
   Testerline1_CycleTimes.StationEntry  
 WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 16
UNION ALL
SELECT
     Testerline1_CycleTimes.Station,
     Testerline1_CycleTimes.StationEntry
WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 3
END

 ELSE
 BEGIN
 SELECT
      Testerline1_CycleTimes.Station,
      Testerline1_CycleTimes.StationEntry
 WHERE
     Testerline1_CycleTimes.Station LIKE @Station
     AND Testerline1_CycleTimes.StationEntry Between @Start And @End
 END
于 2013-03-13T05:45:47.777 に答える