다음을 통해 공유


BETWEEN(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

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

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

결과 값

test_expression의 값이 begin_expression의 값보다 크거나 같고 end_expression의 값보다 작거나 같으면, BETWEEN에서 TRUE를 반환합니다.

test_expression의 값이 begin_expression의 값보다 작거나 end_expression의 값보다 크면, NOT BETWEEN에서 TRUE를 반환합니다.

설명

경계값이 포함되지 않는 범위를 지정하려면 보다 큼(>) 및 보다 작음 연산자(<)를 사용합니다. BETWEEN 또는 NOT BETWEEN 조건자에 입력한 값이 NULL이면 결과는 UNKNOWN이 됩니다.

예제

A. BETWEEN 사용

다음 예제에서는 데이터베이스의 데이터베이스 역할에 대한 정보를 반환합니다. 첫 번째 쿼리는 모든 역할을 반환합니다. 두 번째 예제에서는 BETWEEN 절을 사용하여 역할을 지정한 database_id 값으로 제한합니다.

SELECT principal_id, name 
FROM sys.database_principals
WHERE type = 'R';

SELECT principal_id, name 
FROM sys.database_principals
WHERE type = 'R'
AND principal_id BETWEEN 16385 AND 16390;
GO  

결과 집합은 다음과 같습니다.

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
principal_id	name
------------  ---- 
16385	        db_accessadmin
16386	        db_securityadmin
16387	        db_ddladmin
16389	        db_backupoperator
16390	        db_datareader

B. BETWEEN 대신 > 및 < 사용

다음 예에서는 보다 큼(>) 및 보다 작음(<) 연산자를 사용합니다. 이 연산자는 경계값을 포함하지 않기 때문에 이전 예에서 10개의 행을 반환한 것과 달리 9개의 행을 반환합니다.

-- Uses AdventureWorks  
  
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  

C. NOT BETWEEN 사용

다음 예에서는 지정한 범위인 27에서 30사이에 속하지 않는 모든 행을 검색합니다.

-- Uses AdventureWorks  
  
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' 이하인 행을 검색합니다.

-- Uses AdventureWorks  
  
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 A.M.이 사용됩니다. 2002-01-05에서 12:00 A.M. 이후의 시간 부분이 포함된 행은 범위를 벗어났으므로 이 쿼리에서 반환되지 않습니다.

참고 항목

> (보다 큼)(Transact-SQL)
< (보다 작음)(Transact-SQL)
식(Transact-SQL)
기본 제공 함수(Transact-SQL)
연산자(Transact-SQL)
SELECT(Transact-SQL)
WHERE(Transact-SQL)