1. ホーム
  2. sql

[解決済み】MS SQL Serverの "between "は範囲境界を含むのか?

2022-04-01 17:20:16

質問

例えば、以下のようなことが可能です。

SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10

は、5と10を選択するか、それとも範囲から除外されますか?

解決方法を教えてください。

BETWEEN演算子は包括的です。

ブックスオンラインより。

BETWEEN は、以下の場合に TRUE を返します。 test_expressionは はbegin_expressionの値と等しい。 の値以下であること。 end_expression となります。

DateTimeの注意点

注意:DateTimesの場合、日付だけを指定した場合、その日の午前0時時点の値となります。終了日の時刻がずれてしまったり、複数の範囲で翌日の午前0時のデータを繰り返し取得することを避けるために、終了日は、開始日の翌日の午前0時より3ミリ秒前に指定する必要があります。 3ミリ秒を下回ると、翌日の午前0時に切り上げられるからです。

例:2016年6月中の値をすべて取得するには、次のように実行する必要があります。

where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')

すなわち

where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'

datetime2 と datetimeoffset

日付から3ミリ秒を引くと、3ミリ秒のウィンドウから行が欠ける可能性があります。正しい解決策は、最もシンプルなものでもあります。

where myDateTime >= '20160601' AND myDateTime < '20160701'