關於IP範圍資料查詢 |
答題得分者是:pcboy
|
tahoo
一般會員 ![]() ![]() 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
各位大大請教個問題,
我想找一個區段的ip位置,如200.0.0.0~254.254.254.254範圍, 我用sql語法去做查詢的時候,查詢語法如下 SELECT FindIP FROM IPData WHERE FindIP between '200.0.0.0' And '254.254.254.254' 因為ip位置是以文字欄位存放,所以查詢結果也會會將20.x.x.x~25.x.x.x的範圍也會找出來, 但我只要200.0.0.0~254.254.254.254範圍內的結果, 有何方法可以讓資料查詢的結果正確一點嗎? 爬了好久的文,找不到類似的文章,只好上來發問了,不好意思.. |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
ko
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
有一種方式是MSSQL的用法
select IP from IPDATA where IP LIKE '2[0-5][0-5].[0-2][0-5][0-5].[0-2][0-5][0-5].[0-2][0-5][0-5]' 表示是找字串固定開頭=2 但是第二的字元是[0-5]=0,1,2,3,4,5 後略..... 但是指定字元的話,不會找到200.0.0.0而是找到200.000.000.000 ===================引 用 tahoo 文 章=================== 各位大大請教個問題, 我想找一個區段的ip位置,如200.0.0.0~254.254.254.254範圍, 我用sql語法去做查詢的時候,查詢語法如下 SELECT FindIP FROM IPData WHERE FindIP? between '200.0.0.0' And '254.254.254.254' 因為ip位置是以文字欄位存放,所以查詢結果也會會將20.x.x.x~25.x.x.x的範圍也會找出來, 但我只要200.0.0.0~254.254.254.254範圍內的結果, 有何方法可以讓資料查詢的結果正確一點嗎? 爬了好久的文,找不到類似的文章,只好上來發問了,不好意思..
------
====================== 昏睡~ 不昏睡~ 不由昏睡~
編輯記錄
ko 重新編輯於 2007-07-12 16:30:17, 註解 無‧
|
tahoo
一般會員 ![]() ![]() 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
謝謝PCBOY大大,
我程式己經做好了, 目前的查詢結果都是正確的, 我是用您建議的第二個方法, 建立二個16進位的欄位, 再用此進行比對, 謝謝您!! ===================引 用 pcboy 文 章=================== 幾種做法可以考慮 1. 將IP 的 4 個數值分別存在不同的欄位中 2.使用別種方式儲存 IP 值 例如 200.0.0.0 => C8000000 , 200.255.255.255 => C8FFFFFF 3.把所有筆的 IP 值讀取後, 用程式分析比對符合的 |
tahoo
一般會員 ![]() ![]() 發表:22 回覆:19 積分:8 註冊:2003-05-13 發送簡訊給我 |
先謝謝您的解答,
但這方法有些複雜, 我還是採用PCBOY大的第二個方法, 謝啦!! ===================引 用 ko 文 章=================== 有一種方式是MSSQL的用法 select IP from IPDATA where IP LIKE '2[0-5][0-5].[0-2][0-5][0-5].[0-2][0-5][0-5].[0-2][0-5][0-5]' 表示是找字串固定開頭=2 但是第二的字元是[0-5]=0,1,2,3,4,5 後略..... 但是指定字元的話,不會找到200.0.0.0而是找到200.000.000.000 ===================引 用 tahoo 文 章=================== 各位大大請教個問題, 我想找一個區段的ip位置,如200.0.0.0~254.254.254.254範圍, 我用sql語法去做查詢的時候,查詢語法如下 SELECT FindIP FROM IPData WHERE FindIP? between '200.0.0.0' And '254.254.254.254' 因為ip位置是以文字欄位存放,所以查詢結果也會會將20.x.x.x~25.x.x.x的範圍也會找出來, 但我只要200.0.0.0~254.254.254.254範圍內的結果, 有何方法可以讓資料查詢的結果正確一點嗎? 爬了好久的文,找不到類似的文章,只好上來發問了,不好意思.. |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
不一定要轉16進位, 也可用10進位, 或其他方便比對的表示法來儲存
200.0.0.0 => 200000000000 200.255.255.255 => 200255255255 或 200.0.0.0 => 200.000.000.000 200.255.255.255 => 200.255.255.255 雖然要多花幾個byte, 但是可能比看16進位習慣 200.000.000.000 要顯示的時候, 用字串切割 (分隔字元是 . ), 切成 200 000 000 000 然後用字串轉數字 200 => 200 000 => 0 轉換顯示可以另外寫個副程式處理
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |