쿼리 where 조건 문의 0 1 1,265

by 권사마 [SQL Query] [2017.01.04 13:53:58]


WITH IP_TABLE AS (
SELECT 
        '100.200.300.1' AS IP_START,
        '100.200.400.255' AS IP_END
FROM DUAL )

SELECT * FROM IP_TABLE
WHERE 1=1
AND ?
;


위 테이블에서 특정 IP가 IP_START ~ IP_END 컬럼 대역간의 있는지 확인할려면 어떻게 쿼리를 해야 하는지?

EX) 100.100.300.10 IP를 검색해서 IP_START(100.200.300.1)~IP_END(100.200.400.255) 의 컬럼에서 확인 하는 방법

고수님들께 조언 부탁 드립니다.

 

by jkson [2017.01.04 14:06:02]

http://www.gurubee.net/lecture/2195

각 자리를 고정자리로 변환 후 비교하시면 됩니다.

WITH IP_DATA AS
(
SELECT  '100.100.300.1' AS IP FROM DUAL UNION ALL
SELECT  '100.200.300.1' AS IP FROM DUAL UNION ALL
SELECT  '100.200.300.57' AS IP FROM DUAL UNION ALL
SELECT  '100.200.300.60' AS IP FROM DUAL UNION ALL
SELECT  '100.200.300.167' AS IP FROM DUAL UNION ALL
SELECT  '100.200.400.82' AS IP FROM DUAL UNION ALL
SELECT  '100.200.500.52' AS IP FROM DUAL UNION ALL
SELECT  '100.300.300.6' AS IP FROM DUAL
)
SELECT * 
FROM IP_DATA A
WHERE REGEXP_REPLACE(REPLACE('.'||ip, '.', '.00'), '([^.]{3}(\.|$))|.', '\1')
BETWEEN '100.200.300.001' AND '100.200.400.255'

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입