次の方法で共有


ビトウィーン(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

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

Transact-SQL 構文表記規則

Syntax

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Arguments

test_expression

式は、begin_expressionend_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_expressionend_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 を使用する

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

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 分より後の時刻部分を含む行は、範囲外であるため、このクエリによって返されません。