我的表看起来像这样:
ip
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
(...)
192.168.1.254
我试图从表中获得一个结果,告诉我我的数据库中有哪些类(例如地址192.168.1.1结果是192.168.1.0/24或只是192.168.1.0)。
这可以使用该数据库吗?
答案 0 :(得分:1)
你可以这样做:
SELECT concat(LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress))), '.0') as ipClassThing,
count(1) as numberInClassTypeThing
FROM test t
GROUP BY LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress)))
请参阅SQL Fiddle
基本上在上面,我们正在查找.
的最后一次出现,只取其前面的字符串部分,然后在最后添加.0
。
使用示例数据/表:
create table test (ipaddress varchar(50));
insert into test (ipaddress) values ('192.168.1.1');
insert into test (ipaddress) values ('192.168.1.0');
insert into test (ipaddress) values ('192.168.1.55/24');
insert into test (ipaddress) values ('10.1.1.1');
以上查询给出了结果:
ipClassThing numberInClassTypeThing
----
10.1.1.0 1
192.168.1.0 3