適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
テスト範囲を指定します。
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Arguments
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
Remarks
BETWEEN は、TRUE の値が begin_expression の値以上で、end_expressionの値以下の場合に を返します。
NOT BETWEEN は、TRUE の値が begin_expression の値より小さいか、end_expressionの値より大きい場合に を返します。
両端を除いた範囲を指定するには、より大きいことを表す演算子 (>) と、より小さいことを表す演算子 (<) を使用します。
BETWEEN または NOT BETWEEN 述語への入力が NULL場合、結果は構成要素の結果によって異なります。
次の test_expression >= begin_expression AND test_expression <= end_expression例では、いずれかの部分が FALSE されている場合、BETWEEN 式全体が FALSEに評価されます。 それ以外の場合、式は UNKNOWNに評価されます。
Examples
この記事のコード サンプルでは、AdventureWorks2025 または AdventureWorksDW2025 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。
A. 使用状況
次の例は、データベース内のデータベース ロールに関する情報を返します。 最初のクエリはすべてのロールを返します。 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 値が日付の時刻部分なしで指定されるため、クエリは予想される行を取得します。 時刻部分が指定されていない場合、既定では午前 12 時に設定されます。2002 年 1 月 5 日午前 12 時 00 分より後の時刻部分を含む行は、範囲外であるため、このクエリによって返されません。