업무상 필요한 쿼리라 활용하려 했는데 희한하게 안나오네요
예)192.168.0.1 부터 192.168.0.254 사이의 값을 select 하려는데 값이 안나옵니다
IP 주소 컬럼 : startip , endip 시작주소와 끝자리 주소를 입력할수 있습니다
select * from dbo.IPDATA 를 입력 시
startip와 endip 주소가 암호화 되어 나옵니다
-1062731688 <--이런식으로요..
그래서 아래와 같은 방식으로 조회하면 정상 IP값이 나옵니다
select dbo.fn_ipnum2str(startip), empguid from dbo.IPDATA
그래서 아래와 같은 값으로 특정 IP대역의 사이의 값을 불러오려고 하는데요
정상적으로 나오질 않네요
SELECT *
FROM dbo.IPDATA WHERE dbo.fn_ipnum2str(startip)>='192.168.0.1' and dbo.fn_ipnum2str(EndIP)<='192.168.0.254'
어떻게 해야 사이의 값을 구할수 있을까요??
부탁드립니다 ㅠ
Comment 5
-
야구소년
2014.02.12 13:03
답변 감사드립니다
sql 쿼리에 대한 초짜라 int문에 대한 검색을 해도 조합이 안되네여
공부 더열심히 해야겟습니다
-
SELECT *
FROM dbo.IPDATA WHERE CONVERT(INT, REPLACE(dbo.fn_ipnum2str(startip), '192.168.0', '')) BETWEEN 1 AND 254 -
착한넘
2014.02.12 10:47
dbo.fn_ipnum2str(startip)은 문자타입인거 같은데 LIKE로 검색해도 될것 같습니다.
-
야구소년
2014.02.12 13:04
답변 감사드립니다
원래는 192.168.0.1~254까지의 IP중 포함되는 IP를 삭제하려고 하는것인데
대역은 남겨놓아야 하거든요
다른 방안을 찾아봐야겟네요
숫자라면 1~254까지 나오겠지만
이건 문자열 비교라서 3은 안나오죠.
원하는 결과중엔 "192.168.0.3"이 포함됐으면 하겠지만
"192.168.0.3"은 "192.168.0.254"의 범위를 벗어납니다.
숫자 3은 254보다 작지만 문자 "3"은 "2"보다 크기 때문이죠.
"192.168.0."을 빼버리고 INT로 컨버트 한다음 비교하는건 어떨까요??