BETWEEN
はWHERE
句で使用され、2つの値の間のデータ範囲を選択します。
範囲のエンドポイントが除外されているかどうかが正しければ、DBMS固有です。
以下で理解できないこと:
値のテーブルがあり、次のクエリを実行する場合:
SELECT food_name
FROM health_foods
WHERE calories BETWEEN 33 AND 135;`
クエリは結果として行を返します含むカロリー= 33およびカロリー= 135(つまり、範囲のエンドポイントは含まれる)。
しかし、私がそうするなら:
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'O';
私はnotO
で始まるfood_name
の行を取得します。つまり範囲の終わりは除外です。
クエリが期待どおりに機能するようにするには、次のように入力します。
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'P';`
私の質問は、数字とテキストデータのBETWEEN
になぜそのような違いがあるのですか?
Betweenは、数字と文字列でまったく同じように動作します。 2つのエンドポイントare含まれています。これはANSI規格の一部であるため、すべてのSQLダイアレクトがどのように機能するかを示しています。
表現:
where num between 33 and 135
numが135の場合は一致します。numberが135.00001の場合は一致しません。
同様に、式:
where food_name BETWEEN 'G' AND 'O'
'O'と一致しますが、 'O'で始まる他の文字列とは一致しません。
簡単な応急修理は「〜」を使用することです。これは最大の7ビットASCII値を持っているので、英語のアプリケーションの場合、通常はうまく機能します。
where food_name between 'G' and 'O~'
他にもいろいろなことができます。ここに2つのアイデアがあります:
where left(food_name, 1) between 'G' and 'O'
where food_name >= 'G' and food_name < 'P'
ただし、重要な点は、between
がデータ型に関係なく同じように機能することです。
「オレンジ」と「O」の例を見てみましょう。文字列「オレンジ」は明らかに文字列「O」と等しくなく、長いほど大きくなければならず、小さくはなりません。
ただし、「オレンジ」<「OZZZZZZZZZZZZZZ」を実行することはできます。