sql >> データベース >  >> RDS >> Sqlserver

SQLServerでBETWEEN演算子を使用する方法

    SQL Server BETWEEN 演算子を使用すると、クエリ内の値の範囲をテストできます。たとえば、値が2つの数値の間にあることをテストできます。

    BETWEEN 演算子は包括的です。つまり、範囲内で指定した値が含まれます。つまり、低い値以上の値と、高い値以下の値が含まれます。したがって、>=を使用するようなものです および<=

    実例を示します。

    SELECT Name, Population
    FROM city
    WHERE Population BETWEEN 22000 AND 24000
    ORDER BY Population ASC;

    結果:

    +--------------+--------------+
    | Name         | Population   |
    |--------------+--------------|
    | Thimphu      | 22000        |
    | Weno         | 22000        |
    | Nuku´alofa   | 22400        |
    | Douglas      | 23487        |
    | Saint John´s | 24000        |
    +--------------+--------------+

    前述のように、BETWEEN は包括的であるため、結果には、ANDの左右に指定した2つの値が含まれます。 引数。

    これは、次のことを行うのと同じです。

    SELECT Name, Population
    FROM city
    WHERE Population >= 22000 AND Population <= 24000
    ORDER BY Population ASC;

    結果:

    +--------------+--------------+
    | Name         | Population   |
    |--------------+--------------|
    | Thimphu      | 22000        |
    | Weno         | 22000        |
    | Nuku´alofa   | 22400        |
    | Douglas      | 23487        |
    | Saint John´s | 24000        |
    +--------------+--------------+

    NOT BETWEEN

    NOTを使用できます 値をしないことを指定する引数 指定された2つの値の間にあります。

    SELECT Name, Population
    FROM city
    WHERE Population NOT BETWEEN 300 AND 9696300
    ORDER BY Population ASC;

    結果:

    +-----------------+--------------+
    | Name            | Population   |
    |-----------------+--------------|
    | Adamstown       | 42           |
    | West Island     | 167          |
    | São Paulo       | 9968485      |
    | Seoul           | 9981619      |
    | Mumbai (Bombay) | 10500000     |
    +-----------------+--------------+

    今回は、より小さい演算子とより大きい演算子を使用した場合と同じ結果が得られます。

    SELECT Name, Population
    FROM city
    WHERE Population < 300 OR Population > 9696300
    ORDER BY Population ASC;

    結果:

    +-----------------+--------------+
    | Name            | Population   |
    |-----------------+--------------|
    | Adamstown       | 42           |
    | West Island     | 167          |
    | São Paulo       | 9968485      |
    | Seoul           | 9981619      |
    | Mumbai (Bombay) | 10500000     |
    +-----------------+--------------+

    NOT BETWEENを使用する場合 、指定した値をテストに含める場合は、値をインクリメント/デクリメントする必要があります。

    SELECT Name, Population
    FROM city
    WHERE Population NOT BETWEEN 301 AND 9696299
    ORDER BY Population ASC;

    結果:

    +-----------------+--------------+
    | Name            | Population   |
    |-----------------+--------------|
    | Adamstown       | 42           |
    | West Island     | 167          |
    | Fakaofo         | 300          |
    | Shanghai        | 9696300      |
    | São Paulo       | 9968485      |
    | Seoul           | 9981619      |
    | Mumbai (Bombay) | 10500000     |
    +-----------------+--------------+

    今回は、2つの都市が結果セットに追加されていることがわかります。人口300人のファカオフォ島と人口9696300人の上海。

    ちなみに、これはすべて古いサンプルデータであるため、人口の数値は多くの場合、実際の現実を反映していない可能性があります。

    これが、LessThanまたはEqualToおよびGreaterThan orEqualTo演算子を使用して行う方法です。

    SELECT Name, Population
    FROM city
    WHERE Population <= 300 OR Population >= 9696300
    ORDER BY Population ASC;

    結果:

    +-----------------+--------------+
    | Name            | Population   |
    |-----------------+--------------|
    | Adamstown       | 42           |
    | West Island     | 167          |
    | Fakaofo         | 300          |
    | Shanghai        | 9696300      |
    | São Paulo       | 9968485      |
    | Seoul           | 9981619      |
    | Mumbai (Bombay) | 10500000     |
    +-----------------+--------------+

    BETWEEN 日付付き

    BETWEENを使用する場合 日付の演算子( datetime など) 、 datetime2 、または datetimeoffset 値)、YYYYMMDDの形式を使用するのが最適です ロケールの問題を回避するため(たとえば、ユーザーがセッションの日付形式を変更した場合)。

    また、時間コンポーネントを指定しない場合、デフォルトで午前12:00になります。

    したがって、次のクエリでは、午前12時以降の時間部分を含む行は返されません。 1973-12-31に。

    SELECT * FROM Artists
    WHERE ActiveFrom  BETWEEN '20010101' AND '20011231';

    それに応じて日付の値を調整するか、「より大きい」または「等しい」および「より小さい」演算子を使用することをお勧めします。

    このように:

    SELECT * FROM Artists
    WHERE ActiveFrom  >= '20010101' AND ActiveFrom < '20011231';

    1. C#:オブジェクトをDbNullから他のタイプにキャストすることはできません

    2. PostgreSQLでのSign()関数のしくみ

    3. SQL:カンマ区切りの文字列を解析し、結合として使用します

    4. OracleデータベースでINTO句を使用して即時実行を使用する方法