假設有一個只有一個字段的表格。表被命名爲address
,有一個名爲ip
字段,它包含一個IPv4地址作爲其值提取IPV4的前三個字節
樣本數據
192.168.120.201
192.168.120.202
192.168.120.203
192.168.120.204
192.168.120.205
192.168.121.3
192.168.121.50
我需要運行在此表的查詢,將在第一個返回數據COUNT
三個八位位組
期望輸出
網絡計數
192.168.120 5
192.168.121 3
我嘗試使用SUBSTR
像
SELECT SUBSTR(ip,1,10) as network,COUNT(*) as c FROM address GROUP BY network HAVING(c>1)
但問題是,由於預計今年SUBSTR
只會工作如果前3個八位字節每個都有3位數字,但這將在任何第一個沒有3位數字的IP地址中斷三個八位字節。例如,這將不會爲
192.168.0.0
192.2.3.50
192.23.4.60
問題
工作是否有任何替代上述查詢哪些可以在上面的所有情況下工作?
偉大的答案,但你仍然需要修剪結尾的八位字節。 – 2013-04-04 16:51:15
這將是一個顯示的東西。由於最終八位字節已被清零,因此可以對inet變換的結果進行分組。例如他們都是'x.x.x.0' – 2013-04-04 16:54:34
謝謝馬克這個優雅的答案。就像你一樣,我期望這個比下面給出的兩個答案更快。然而,在相同的數據上,這個查詢花費了0.28秒,而substring_index花費了0.15秒。我錯過了什麼? – 2013-04-04 17:20:53