파워노트

범위 검색 비교 연산자 보다는 BETWEEN ~ AND 사용하기 본문

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 초의 데이터와 비교 처리 해야 한다. 

 

반응형
Comments