BETWEEN (Transact-SQL)

テスト範囲を指定します。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

引数

  • test_expression
    begin_expressionと end_expression で定義した範囲内でテストするを指定します。 test_expression のデータ型は、begin_expression および end_expression の両方と同じにする必要があります。

  • NOT
    述語の結果を否定することを指定します。

  • begin_expression
    有効な式を指定します。 begin_expression のデータ型は、test_expression および end_expression の両方と同じにする必要があります。

  • end_expression
    有効な式を指定します。 end_expression のデータ型は、test_expressionおよび begin_expression の両方と同じにする必要があります。

  • AND
    begin_expression と end_expression で表される範囲内で test_expression をテストする必要があることを示すプレースホルダーです。

戻り値の型

Boolean

戻り値

test_expression の値が begin_expression の値以上で end_expression の値以下の場合、BETWEEN は TRUE を返します。

test_expression の値が begin_expression の値より小さく end_expression の値より大きい場合、NOT BETWEEN は TRUE を返します。

説明

両端を除いた範囲を指定するには、より大きいことを表す演算子 (>) と、より小さいことを表す演算子 (<) を使用します。 BETWEEN または NOT BETWEEN の述語に対する入力が NULL の場合、結果は UNKNOWN になります。

使用例

A. BETWEEN を使用する

次の例では、Adventure Works Cycles で、時給が 27 ~ 30 の間の従業員を返します。

USE AdventureWorks2012;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e 
JOIN HumanResources.EmployeePayHistory ep 
    ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO

以下に結果セットを示します。

FirstName    LastName            Rate

-----------  ------------------  ------------------

Paula        Barreto de Mattos   27.1394

Karen        Berg                27.4038

Ramesh       Meyyappan           27.4038

Dan          Bacon               27.4038

Janaina      Bueno               27.4038

David        Bradley             28.7500

Hazem        Abolrous            28.8462

Ovidiu       Cracium             28.8462

Rob          Walters             29.8462

Sheela       Word                30.0000

(10 row(s) affected)

B. BETWEEN の代わりに > と < を使用する

次の例では、より大きいことを表す演算子 (>) と、より小さいことを表す演算子 (<) を使用します。どちらも両端を含まないため、前の例の 10 行とは異なり、9 行が返されます。

USE AdventureWorks2012;
GO

SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e 
JOIN HumanResources.EmployeePayHistory ep 
    ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate > 27 AND ep.Rate < 30
ORDER BY ep.Rate;
GO

以下に結果セットを示します。

FirstName   LastName             Rate

---------   -------------------  ---------

Paula       Barreto de Mattos    27.1394

Janaina     Bueno                27.4038

Dan         Bacon                27.4038

Ramesh      Meyyappan            27.4038

Karen       Berg                 27.4038

David       Bradley              28.7500

Hazem       Abolrous             28.8462

Ovidiu      Cracium              28.8462

Rob         Walters              29.8462

(9 row(s) affected)

C. NOT BETWEEN を使用する

次の例では、指定した範囲 27 ~ 30 に該当しないすべての行を検索します。

USE AdventureWorks2012;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e 
JOIN HumanResources.EmployeePayHistory ep 
    ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate NOT BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO

D. BETWEEN を datetime 値と共に使用する

次の例では、datetime 値が '20011212' から '20020105' までの範囲内にある行を取得します。

USE AdventureWorks2012;
GO
SELECT BusinessEntityID, RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';

以下に結果セットを示します。

BusinessEntityID RateChangeDate

----------- -----------------------

3           2001-12-12 00:00:00.000

4           2002-01-05 00:00:00.000

クエリ内の日付値と RateChangeDate 列の datetime 値は、時刻部分なしで日付が指定されているため、このクエリは予測される行を取得します。 時刻部分は、指定されていなければ、既定で午前 12 時になります。 時刻部分として 2002 年 1 月 5 日の午前 12 時よりも後の値が格納されている行は、 範囲外になるため、このクエリでは返されません。

関連項目

参照

> (より大きい) (Transact-SQL)

< (より小さい) (Transact-SQL)

式 (Transact-SQL)

組み込み関数 (Transact-SQL)

演算子 (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)