다음을 통해 공유


BETWEEN(Transact-SQL)

적용 대상:Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)SQL 분석 엔드포인트

테스트할 범위를 지정합니다.

Transact-SQL 구문 표기 규칙

구문

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

인수

test_expression

식은 begin_expressionend_expression정의된 범위에서 테스트할. test_expressionbegin_expressionend_expression 모두와 동일한 데이터 형식이어야 합니다.

NOT

조건자의 결과가 무효화되도록 지정합니다.

begin_expression

유효한 식입니다. begin_expressiontest_expressionend_expression 모두와 동일한 데이터 형식이어야 합니다.

end_expression

유효한 식입니다. end_expressiontest_expressionbegin_expression 모두와 동일한 데이터 형식이어야 합니다.

AND

test_expressionbegin_expressionend_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 사용

다음 예제에서는 데이터베이스의 데이터베이스 역할에 대한 정보를 반환합니다. 첫 번째 쿼리는 모든 역할을 반환합니다. 두 번째 예제에서는 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:00입니다. 2002년 1월 5일 오전 12:00 이후인 시간 부분이 포함된 행은 범위를 벗어나므로 이 쿼리에서 반환되지 않습니다.