私が知る限り、Date(...)は必要ありません。この例はうまくいくようです
DECLARE @TheDate Date = '2012-07-01';
SELECT 'hello' WHERE (@TheDate BETWEEN '2012-04-01' AND '2012-06-30')
--None returned
SET @TheDate = '2012-05-01'
SELECT 'hello' WHERE (@TheDate BETWEEN '2012-04-01' AND '2012-06-30')
--selects hello
日時の回答でこの質問を見る価値のあるところで編集してください(労力を節約するためにここに投稿します)
betweenステートメントは、日付の範囲境界に関する問題を引き起こす可能性があります。
BETWEEN '01/01/2009' AND '01/31/2009'
本当に次のように解釈されます
BETWEEN '01/01/2009 00:00:00' AND '01/31/2009 00:00:00'
そのため、1月31日の日に発生したものはすべて見逃されます。この場合、以下を使用する必要があります。
myDate >= '01/01/2009 00:00:00' AND myDate < '02/01/2009 00:00:00' --CORRECT!
また
BETWEEN '01/01/2009 00:00:00' AND '01/31/2009 23:59:59' --WRONG! (see update!)
更新:2009年1月1日23:59:59.997までの日時で、その日の最後の1秒以内にレコードを作成することは完全に可能です!!
このため、このBETWEEN (firstday) AND (lastday 23:59:59)
アプローチはお勧めしません。
myDate >= (firstday) AND myDate < (Lastday+1)
代わりにアプローチを使用してください。