2011-07-19 9 views
0

SQL DATEADD()関数を使用してこの営業日のレコードを検索するにはどうすればよいですか?たとえば、:この営業日に値を見つけるDATEADD()関数

SELECT * FROM records r 
WHERE r.creationTime <= GETDATE() 
    AND r.creationTime >= DATEADD(dd, -1 * hoursFromStartOfThisDay, GETDATE()) 

ここで、「hoursFromStartOfThisDay」は正確に言うとおりです。

注:月曜日から金曜日の午前9時から午後5時までは営業日を話しています。

ありがとうございます!

編集:私はまた、週/月の始まりの開始とこれからの時間のために、これに解決策を適用することを検討しています。

編集:18/07/2011 08:55:00にレコードが作成され、18/07/2011 09:05:00にレコードが作成された場合は、2番目のレコードをクエリで取得する最初のものではありません。しかし、現在のGETDATE()が18/07/2011 09:15:00であれば、それは扱いにくくなります。

AND r.creationTime >= '9am'について教えてください。

+2

次のとおりです。あなたの一日は9から5に、静的な場合 は、あなただけのこの静的な範囲を使用することができますか?名前*は私たちにとって有用ではありません。そして時間のデータ型? "時間"?そして、それは明確ではないので、サンプルデータをお願いします – gbn

+0

"今日の午前9時"に計算を見つけることを試みていますか?あなたはどのように次の時間を治療したいですか? 23:59、00:00、00:01、08:59、17:01? – MatBailie

+0

-1あなたの質問の更新は、これまでよりも曖昧になります – gbn

答えて

1

本当にhoursFromStartOfThisDay変数が必要ですか? 「hoursFromStartOfThisDayは」であることの意味は何

-- cache current date to avoid multiple calls 
DECLARE @startOfADay INT 
DECLARE @dayLength INT 
DECLARE @currentDate DATETIME 
SET @currentDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
SET @startOfADay = 9 
SET @dayLength = 8 

SELECT 
    ... 
FROM 
    ... 
WHERE ... 
BETWEEN 
     DATEADD(hh, @startOfADay, @currentDate) 
     AND 
     DATEADD(hh, @startOfADay + @dayLength, @currentDate) 
+0

私はそれを考えて、うまくいくでしょう。しかし、私はこれを基本的な例として使用していましたが、リンゴには、週/月の始まりと今も「今」の間にレコードを見つけるための解決策に行きました。それを含めるように質問を編集します。 – bobble14988

+0

聞いてよかったので、私はあなたの質問に答えましたか? – sll

+0

私が提供したコードを試しましたか? – sll

関連する問題