2016-04-03 42 views
0

我有一個表FT,其中包含一個名爲IPaddress的列。列中的數據都是「100.45.4.7」形式的I​​P地址。 我只是想知道如果我可以選擇從100.45.x.x到100.150.x.x範圍內的所有IP地址。 (我不關心最後兩個節點)。我有下面的代碼運行沒有錯誤,但我不知道我是否正確。Sql LIKE一系列數字

  select * from FT where IPaddress like "100.[45-150]%" 

thx!

+0

[IP地址存儲在MySQL數據庫(http://stackoverflow.com/questions/ 6427786/ip-address-stored-in-mysql-database) – lad2025

回答

4

不要將IP地址存儲爲字符串。將它們存儲爲整數。

使用MySQL函數INET_ATON()將IP地址字符串轉換爲數字,並將INET_NTOA()轉換回來。一旦執行了此轉換,與IP相對應的數字將是連續的,因此您可以在查詢中使用諸如IPaddress BETWEEN INET_ATON('100.45.0.0') AND INET_ATON('100.150.255.255')之類的條件。

(你的編程語言可能有類似的功能,以及;例如,PHP有ip2long()long2ip()同樣的原則也將在那裏工作。)

+0

你可以多勞多得嗎? :P – xQbert

+0

thx !!我將IP地址存儲爲INT。然後存儲的數據變成「1215」而不是「100.45.7.8」。你會再次驗證這一點?多謝! –

+0

@duskwuff實際上所有數據存儲爲1215,而不是以4個節點的原始格式(例如:「100.45.7.8」) –

1

Duskwuff給了一個很好的答案,一個我建議用在我的。

但是,如果你不得不保持目前的結構,可以使你的查詢工作是這樣的:

select * from FT where SUBSTRING_INDEX(IPaddress , '.', 1) = 100 AND SUBSTRING_INDEX(SUBSTRING_INDEX(IPaddress , '.', 2),'.',-1) BETWEEN 45 AND 150 
+0

thx爲答案!我在python上使用sql語句,它說像substring_index沒有這樣的函數,任何機會,你知道爲什麼?多謝!!!!!! –

+0

最有可能是由於你的MySQL版本沒有它。試試5.1及以上。 –