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) 의 컬럼에서 확인 하는 방법
고수님들께 조언 부탁 드립니다.
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'