카테고리:

조건식 함수

[ NOT ] BETWEEN

입력 식(숫자 또는 문자열)이 지정된 하한과 상한 내에 있을 때 TRUE 를 반환합니다.

구문

<expr> [ NOT ] BETWEEN <lower_bound> AND <upper_bound>
Copy

인자

expr

입력 식입니다.

lower_bound

하한입니다.

upper_bound

상한입니다.

반환

함수는 BOOLEAN 형식의 값을 반환합니다.

사용법 노트

  • expr BETWEEN lower_bound AND upper_boundexpr >= lower_bound AND expr <= upper_bound 와 동등합니다.

  • 지정된 상한이 하한보다 커야 합니다.

  • 인자 값의 데이터 타입은 동일하거나 호환 가능 해야 합니다.

    함수가 암시적으로 값을 다른 데이터 타입으로 형변환하면 예기치 않은 결과가 반환될 수 있습니다.

    예를 들어 expr 이 TIMESTAMP 값이고 lower_boundupper_bound 값이 DATE 값인 경우 DATE 값은 암시적으로 TIMESTAMP 값으로 형변환되고 시간은 00:00:00 으로 설정됩니다. 다음 WHERE 절의 경우 timestamp_column 이 테이블에서 TIMESTAMP 유형의 열이라고 가정합니다.

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
    
    Copy

    DATE 값이 암시적으로 형변환된 경우 WHERE 절은 다음과 같이 해석됩니다.

    WHERE timestamp_column BETWEEN '2025-04-30 00:00:00' AND '2025-04-31 00:00:00'
    
    Copy

    이 WHERE 절을 사용하면 함수는 2025-04-31의 거의 모든 timestamp_column 값에 대해 FALSE 를 반환하는데, 이는 의도하지 않은 결과일 수 있습니다. 이 특정 문제를 방지하려면 함수를 호출할 때 upper_bound 에 그다음 날을 지정할 수 있습니다.

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
    
    Copy

데이터 정렬 세부 정보

A BETWEEN X AND Y 식은 A >= X AND A <= Y 와 동일합니다. XY 비교에 사용되는 데이터 정렬은 독립적이며, 동일할 필요는 없지만 둘 다 A 의 데이터 정렬과 호환되어야 합니다.

다음은 숫자 및 문자열 값과 함께 BETWEEN을 사용하는 몇 가지 간단한 예입니다.

SELECT 'true' WHERE 1 BETWEEN 0 AND 10;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+

다음 예에서는 COLLATE와 BETWEEN을 함께 사용합니다.

SELECT 'm' BETWEEN COLLATE('A', 'lower') AND COLLATE('Z', 'lower');
Copy
+-------------------------------------------------------------+
| 'M' BETWEEN COLLATE('A', 'LOWER') AND COLLATE('Z', 'LOWER') |
|-------------------------------------------------------------|
| True                                                        |
+-------------------------------------------------------------+
SELECT COLLATE('m', 'upper') BETWEEN 'A' AND 'Z';
Copy
+-------------------------------------------+
| COLLATE('M', 'UPPER') BETWEEN 'A' AND 'Z' |
|-------------------------------------------|
| True                                      |
+-------------------------------------------+