BETWEEN (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric Warehouse
Microsoft Fabric SQL Database
テスト範囲を指定します。
構文
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
解説
BETWEEN
は、test_expression の値が begin_expression の値以上で、end_expressionの値以下の場合に TRUE
を返します。
NOT BETWEEN
は、test_expression の値が begin_expression の値より小さいか、end_expressionの値より大きい場合に TRUE
を返します。
両端を除いた範囲を指定するには、より大きいことを表す演算子 (>
) と、より小さいことを表す演算子 (<
) を使用します。
BETWEEN
または NOT BETWEEN
述語への入力が NULL
場合、結果は構成要素の結果によって異なります。
次の test_expression >= begin_expression AND test_expression <= end_expression
例では、いずれかの部分が FALSE
されている場合、BETWEEN
式全体が FALSE
に評価されます。 それ以外の場合、式は UNKNOWN
に評価されます。
例
この記事のコード サンプルでは、AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。
A. BETWEEN を使用する
次の例は、データベース内のデータベース ロールに関する情報を返します。 最初のクエリはすべてのロールを返します。 2 つ目の例では、BETWEEN
句を使用して、指定された database_id
値にロールを制限します。
SELECT principal_id,
name
FROM sys.database_principals
WHERE type = 'R';
結果セットは次のとおりです。
principal_id name
------------ ----
0 public
16384 db_owner
16385 db_accessadmin
16386 db_securityadmin
16387 db_ddladmin
16389 db_backupoperator
16390 db_datareader
16391 db_datawriter
16392 db_denydatareader
16393 db_denydatawriter
SELECT principal_id,
name
FROM sys.database_principals
WHERE type = 'R'
AND principal_id BETWEEN 16385 AND 16390;
GO
結果セットは次のとおりです。
principal_id name
------------ ----
16385 db_accessadmin
16386 db_securityadmin
16387 db_ddladmin
16389 db_backupoperator
16390 db_datareader
B. BETWEEN の代わりに >
と <
を使用する
次の例では、より大きい (>
) およびより小さい (<
) 演算子を使用します。これらの演算子は含まれていないため、前の例で返された 10 行ではなく 9 行を返します。
SELECT e.FirstName,
e.LastName,
ep.Rate
FROM HumanResources.vEmployee AS e
INNER JOIN HumanResources.EmployeePayHistory AS 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
C: NOT BETWEEN を使用する
次の例では、指定した範囲 27
~ 30
に該当しないすべての行を検索します。
SELECT e.FirstName,
e.LastName,
ep.Rate
FROM HumanResources.vEmployee AS e
INNER JOIN HumanResources.EmployeePayHistory AS ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate NOT BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
D. DATETIME 値で BETWEEN を使用する
次の例では、datetime 値が 20011212
から 20020105
までの範囲内にある行を取得します。
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 時 00 分より後の時刻部分を含む行は、範囲外であるため、このクエリによって返されません。