2017-03-07 9 views
1

SQL Server 2008 R2を使用して昨日のシフトのデータを取得しようとしています。DateTime値を使用して前日のデータをフィルタリングする

シフトは午後20時に開始し、翌日午前10時に終了します。

シフト全体のデータを取得するのに、どの日付機能を使用できますか?これを使用する

CAST([LastStartedDate] as time)> cast('20:00' as Time) 

は深夜までのデータを取得します。

+0

これを追加します。これはあなたを助けるでしょう: 'どこで[時間] 2016-04-08 20:00:00 'AND' 2016-04-09 00:00:00'' –

答えて

0

あなたがそうのようないくつかの日付操作を使用していますWHERE句であなたの日付をフィルタリングすることができます

WHERE LastStartedDate >= DATEADD(HOUR, 20, 
          CAST(CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS DATETIME)); 

この最初はDATEので、それは時間部分削除として、昨日の日付を取得します。

SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) 
-- 2017-03-06 

それをDATETIMEに戻して、その日の真夜中の時刻を追加します。

SELECT CAST(CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS DATETIME) 
-- 2017-03-06 00:00:00.000 

は、その後、それは20:00にあなたを得るために20時間を追加 - 8.00PM:あなたのシナリオでは

SELECT DATEADD(HOUR, 20,CAST(CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS DATETIME)); 
-- 2017-03-06 20:00:00.000 

、あなたは午前10時をすぎてカットオフを取得するために、再度同じことを行うとBETWEENを使用する必要があります。

例:

CREATE TABLE #shift 
    (
     LastStartedDate DATETIME , 
     WorkItemsDone INT 
    ); 

INSERT INTO #shift 
     (LastStartedDate, WorkItemsDone) 
VALUES (DATEADD(HOUR, -18, GETDATE()), 10), 
     (DATEADD(HOUR, -15, GETDATE()), 20), 
     (DATEADD(HOUR, -14, GETDATE()), 30), 
     (DATEADD(HOUR, -10, GETDATE()), 40), 
     (DATEADD(HOUR, -5, GETDATE()), 25), 
     (DATEADD(HOUR, -2, GETDATE()), 15), 
     (DATEADD(HOUR, 4, GETDATE()), 5), 
     (DATEADD(HOUR, 10, GETDATE()), 15); 

-- all data 
SELECT * 
FROM #shift 

-- limited data 
SELECT * 
FROM #shift 
WHERE LastStartedDate BETWEEN 
     DATEADD(HOUR, 20, CAST(CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS DATETIME)) 
     AND DATEADD(HOUR, 10, CAST(CAST(GETDATE() AS DATE) AS DATETIME)) 

DROP TABLE #shift; 

が生成するには:

-- all data 
LastStartedDate   WorkItemsDone 
2017-03-06 16:18:04.877 10 
2017-03-06 19:18:04.877 20 
2017-03-06 20:18:04.877 30 
2017-03-07 00:18:04.877 40 
2017-03-07 05:18:04.877 25 
2017-03-07 08:18:04.877 15 
2017-03-07 14:18:04.877 5 
2017-03-07 20:18:04.877 15 

-- filtered data 
LastStartedDate   WorkItemsDone 
2017-03-06 20:18:04.877 30 
2017-03-07 00:18:04.877 40 
2017-03-07 05:18:04.877 25 
2017-03-07 08:18:04.877 15 
+0

あなたの助けのための多くのおかげで、完璧に働いた。乾杯。 – user3482527

+0

私はちょうど編集しようとしています。午前10時以降に切断されません。 – Tanner

+0

@ user3482527更新を参照してください。 – Tanner

関連する問題