複数 - sql between 速度




SQL:BETWEEN vs<=および>= (6)

@marc_s、@Cloud、et al。 彼らは基本的に閉鎖された範囲で同じです。

しかし、分数時間の値は、後に半値範囲(大または等しい、 より小さい )とは対照的に、閉じた範囲(大きいか等しいか小さいか )で問題を引き起こす可能性があります。最後の可能な瞬間。

したがって、クエリを次のように書き直す必要はありません。

SELECT EventId, EventName
  FROM EventMaster
 WHERE (EventDate >= '2009-10-15' AND
        EventDate <  '2009-10-19')    /* <<<== 19th, not 18th */

BETWEENは半開きの間隔では機能しないので、おそらくエラーがあるので、それを使用する日時問合せを常に見ています。

SQL Server 2000および2005の場合:

  • これら2つのWHERE節の違いは何ですか?
  • どのシナリオでどちらを使うべきですか?

クエリ1:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate BETWEEN '10/15/2009' AND '10/18/2009'

クエリ2:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate >='10/15/2009'
  AND EventDate <='10/18/2009'

(編集:2番目のEventdateがもともとなくなっていたため、構文的に間違っていました)


BETWEENは読んだり保守したりするのは簡単ですが、閉じた間隔であり、以前に述べたように、日付の問題である可能性があります(時間コンポーネントがなくても)。

例えば、毎月のデータを扱う場合は、 BETWEEN first AND lastで日付を比較するのが普通ですが、実際にはdt >= first AND dt < next-first (時間部分の問題も解決します)を書く方が簡単です。 last決定は通常、 next-firstものを決定するよりも1ステップ長い( next-first日を引くことにより)。

さらに、別の問題は、下限と上限が正しい順序で指定される必要があるということです(つまり、 BETWEEN low AND high )。


Aaron Bertrandのこの優れたブログ記事を参照して、文字列形式を変更する理由と日付範囲クエリで境界値をどのように処理するかを確認してください。


唯一の違いは、各クエリの文法的な砂糖の量であると私は思う。 BETWEENは、2番目のクエリとまったく同じことを言うのにちょっとした方法です。

私が気づいていないRDBMSの違いがいくつかあるかもしれませんが、私は本当にそうは考えていません。


彼らは同じです: BETWEENは、質問の長い構文の略語です。

BETWEENが動作しない場合は、代替の長い構文を使用します。

Select EventId,EventName from EventMaster
where EventDate >= '10/15/2009' and EventDate < '10/18/2009'

< 2番目の条件で<=ではなく注<注)。


論理的には全く違いはありません。 パフォーマンス面では、通常、ほとんどのDBMSでは違いはありません。





between