2011-10-19 8 views
2

YESTERDAY(午前4時から)とTODAY(午前4時に終了)の間で、テーブルからデータを取得しようとしています。これを自動化する最良の方法は何ですか?私はおそらく、今日の日付を取得し、4時間をオフセットし、それを変数に割り当てると考えていますか?現在、毎日手動で時刻/日付を入力しています。SQL Statementで現在の日付+4時間を取得するにはどうすればよいですか?

現在のコード:

SELECT "HC_PRIME_REPORTDATA"."iReportDataID" 
FROM "WinTest1"."dbo"."HC_PRIME_REPORTDATA" "HC_PRIME_REPORTDATA" 
WHERE ("HC_PRIME_REPORTDATA"."dtTime">={ts '2011-10-19 04:00:00'} AND"HC_PRIME_REPORTDATA"."dtTime"<{ts '2011-10-20 04:00:00'}) 

すべてのヘルプは大歓迎です!ここで

+0

どのようなRDBMSですか? SQLサーバー?どのバージョン? – JNK

+0

tsqlタグでSybase/SQL Server –

+0

に制限されています。しかし、バージョンは重要です。 – JNK

答えて

1

はそれを行うための一つの方法である:

DECLARE @HOURS_OFFSET INT=4; -- 4 AM 

DECLARE @YESTERDAY_WITH_OFFSET DATETIME=DATEADD(hh, @HOURS_OFFSET, DATEADD(dd, -1, 
            DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))); 
DECLARE @TODAY_WITH_OFFSET DATETIME=DATEADD(hh, @HOURS_OFFSET,DATEADD(dd, 
             DATEDIFF(dd, 0, GETDATE()), 0)); 

SELECT HC_PRIME_REPORTDATA.iReportDataID 
FROM WinTest1.dbo.HC_PRIME_REPORTDATA AS HC_PRIME_REPORTDATA 
WHERE HC_PRIME_REPORTDATA.dtTime >= @YESTERDAY_WITH_OFFSET 
    AND HC_PRIME_REPORTDATA.dtTime <= @TODAY_WITH_OFFSET 
+1

+1 - うまくいくようです – JNK

+0

日付/時刻の形式を2011-10-19 04:00:00としてコードを調整するだけで、うまくいきます。ありがとうございました。 ** EDIT:**スポークが遅すぎる、ごめんなさい、このように日付の書式設定が検索自体に影響を与えないことに気付きました。私の悪い。 – SiriusBits

1

dateaddは、あなたのタイトルが尋ねる何でしょう:

例えば: select getdate(), dateadd(hh, 4, getdate())

しかし、あなたはbetweenを使用して、日付範囲でフィルタをかけることができます、変数の必要はありません:

例:

SELECT HC_PRIME_REPORTDATA.iReportDataID 
FROM WinTest1..HC_PRIME_REPORTDATA HC_PRIME_REPORTDATA 
WHERE HC_PRIME_REPORTDATA.dtTime between dateadd(hh, 4, convert(datetime, convert(date, dateadd(d, -1, getdate())))) 
              and dateadd(hh, 4, convert(datetime, convert(date, getdate()))) 
+0

彼はそれを午前4時にしたい、これは現在の時間+4時間を返します。 – JNK

+0

@ JNK 'convert'ingを実行すると、時間コンポーネントが失われ、深夜になります。それから、 'dateadd'はそれを4amに増やします。 –

+0

1 - これを編集に追加しました。 2 - あなたはSQL Server 2008+ – JNK

関連する問題