-
Oracle - BETWEEN ANDDatabase/Oracle 2022. 5. 2. 15:52
BETWEEN AND
BETWEEN AND란?
Oracle에서 쿼리문을 작성하다 보면 가장 많이 사용하는 연산자 중 하나가 BETWEEN AND일 것이다. BETWEEN AND는 날짜 및 숫자의 범위 검색에 매우 유용하게 사용되며, 문자의 범위 검색 또한 가능하다.
1. 컬럼명 BETWEEN 시작일자 AND 종료일자 2. 시작일자 <= 컬럼명 AND 컬럼명 <= 종료일자
위와 같이 BETWEEN AND 연산자와 비교 연산자는 동일한 결과가 검색되지만, 특수한 경우가 아니면 BETWEEN AND 연산자의 사용을 권장한다.
날짜 범위 검색
SELECT empno, ename, hiredate FROM EMP WHERE hiredate BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD') AND TO_DATE('1981-12-31', 'YYYY-MM-DD');
위 코드와 같이 TO_DATE() 함수를 사용해서 날짜 범위 검색이 가능하다.
SELECT empno, ename, hiredate FROM EMP WHERE hiredate BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD') AND TO_DATE('1981-12-31', 'YYYY-MM-DD') + 0.99999;
날짜 칼럼에 시간이 포함되어 있다면 종료일자에 0.99999를 더해서 해당 일자의 마지막 시간으로 변환 후 조회가 가능하다.
숫자 범위 검색
SELECT empno, ename, hiredate FROM EMP WHERE empno BETWEEN 7000 AND 7600;
숫자 또한 BETWEEN AND 연산자를 사용해서 범위 검색이 가능하다.
문자 범위 검색
1. 길이가 일정 문자 범위 내 검색
SELECT empno, ename, deptcd FROM EMP WHERE deptcd BETWEEN '10' AND '20';
문자형 칼럼에 숫자 값이 있을 경우 값의 길이가 일정하다면 BETWEEN AND를 사용해서 데이터를 조회할 수 있다.
ㆍ 예시01 : 10, 20, 30, 40, 50
ㆍ 예시02 : 001, 002, 003, ..., 010, 011
ㆍ 예시03 : 1000, 1001, 1002, 2000, 2001
앞서 설명한 쿼리문의 결과는 위와 같다.
2. 길이가 일정하지 않은 문자 범위 내 검색
SELECT empno, ename, deptcd FROM EMP WHERE deptcd BETWEEN '10' AND '20'; -- WHERE TO_NUMBER(deptcd) BETWEEN 20 AND 30
쿼리문을 작성할 때 문자형 칼럼에 BETWEEN AND를 사용할 경우 흔히 방생하는 실수이다. 위 쿼리문의 경우 문자형 칼럼은 숫자형처럼 연산되지 않고, "20"이 첫 문자에 포함된 값을 검색한다.
만약, 숫자형 문자일 경우 길이가 일정하지 않다면, TO_NUMBER() 함수로 형 변환을 한 후 검색하는 것이 바람직하다.
앞서 설명한 쿼리문의 결과는 위와 같다.
728x90'Database > Oracle' 카테고리의 다른 글
Oracle - JOIN 사용 시 ON과 WHERE의 차이 (0) 2023.02.21 Oracle - 조건문(IF, CASE) (0) 2022.04.27 Oracle - MERGE INTO (0) 2022.04.26 Oracle - 반복문(LOOP, WHILE, FOR) (0) 2022.04.25 Oracle - 변수 및 상수 선언 (0) 2022.04.25