oracle
범위 검색 비교 연산자 보다는 BETWEEN ~ AND 사용하기
파워킴
2022. 11. 16. 21:32
반응형
BETWEEN
- BETWEEN연산자를 사용하면 테스트할 범위를 지정할 수 있습니다 .
- 연산자를 사용하여 BETWEEN 문에서 반환된 행에 대한 검색 조건을 구성하면 SELECT값이 지정된 범위에 있는 행만 반환됩니다.
- 다음은 BETWEEN 연산자 의 구문을 보여줍니다 .
expression [ NOT ] BETWEEN low AND high
- 해당구문은 아래와 같음을 의미 한다.
value >= low AND value <= high
between 예제 - 사이 숫자값
- 다음 구문은 비용이 500에서 600 사이인 제품을 반환합니다.
SELECT
product_name,
standard_cost
FROM
products
WHERE
standard_cost BETWEEN 500 AND 600
ORDER BY
standard_cost;
- standard_cost 열이 500~600 범위를 비교 하여 해당범위 제품만을 반환했습니다.
between 예제 - 사이 숫자값이 아닌경우
- 다음 구문은 비용이 500에서 600 사이인 제품이 아닌경우만을 반환 합니다 .
SELECT
product_name,
standard_cost
FROM
products
WHERE
standard_cost NOT BETWEEN 500 AND 600
ORDER BY
product_name;
- standard_cost 열이 500~600 가 아닌 제품을 반환
between 예제 - 날짜값 비교 ( X )
- 주문일이 2016-12-01 과 2016-12-31 사이의 주문값만을 반환 합니다 .
SELECT
order_id,
customer_id,
status,
order_date
FROM
orders
WHERE
order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' ) AND TO_DATE( '2016-12-31', 'YYYY-MM-DD' )
ORDER BY
order_date;
- 결과는 다음과 같습니다.
between 예제 - 날짜값 비교 ( 시간값 포함 )
- 날짜 비교시에는 주의 사항이 있다 .
- 2016-12-10 과 2016-12-02 날짜로 비교 조회시 2016-12-02 일 날짜의 정보를 반환하지 못한다 .
SELECT
order_id,
customer_id,
status,
order_date
FROM
orders
WHERE
order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' ) AND TO_DATE( '2016-12-02', 'YYYY-MM-DD' )
ORDER BY
order_date;
- 아래와 같이 2016-12-02일 날짜가 반환되지 않았다.. 의도 하지 않은 결과이다.
SELECT
order_id,
customer_id,
status,
order_date
FROM
orders
WHERE
order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' )
AND TO_DATE( '2016-12-02', 'YYYY-MM-DD' ) + 0.99999
ORDER BY
order_date;
- 2016-12-02 날짜를 포함한 내용을 처리 하고 싶다면 해당 날짜의 23:59:59 초 나타내야 한다.
- 또는 0.99999 를 더하여 2016-12-02 23:59:59 초가 되도록 한다.\
- 날짜 비교의 경우 DATE type의 경우 기본적으로 시분초를 포함하는 데이터이므로
- 2016-12-01 00:00:00 ~ 2016-12-02:00:00:00 의 데이터를 처리한다. 그러므로 2016-12-02 일의 데이터를 포함시키고자 한다면 2016-12-02 23:59:59 초의 데이터와 비교 처리 해야 한다.
반응형