SQL Server 2008 R2を使用して昨日のシフトのデータを取得しようとしています。DateTime値を使用して前日のデータをフィルタリングする
シフトは午後20時に開始し、翌日午前10時に終了します。
シフト全体のデータを取得するのに、どの日付機能を使用できますか?これを使用する
:
CAST([LastStartedDate] as time)> cast('20:00' as Time)
は深夜までのデータを取得します。
SQL Server 2008 R2を使用して昨日のシフトのデータを取得しようとしています。DateTime値を使用して前日のデータをフィルタリングする
シフトは午後20時に開始し、翌日午前10時に終了します。
シフト全体のデータを取得するのに、どの日付機能を使用できますか?これを使用する
:
CAST([LastStartedDate] as time)> cast('20:00' as Time)
は深夜までのデータを取得します。
あなたがそうのようないくつかの日付操作を使用しています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
あなたの助けのための多くのおかげで、完璧に働いた。乾杯。 – user3482527
私はちょうど編集しようとしています。午前10時以降に切断されません。 – Tanner
@ user3482527更新を参照してください。 – Tanner
これを追加します。これはあなたを助けるでしょう: 'どこで[時間] 2016-04-08 20:00:00 'AND' 2016-04-09 00:00:00'' –