2015-08-26 64 views
1

我的表看起来是这样的:DISTINCT/GROUP BY与通配符。 SQL

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)。

这可能使用该数据库吗?

+1

我被 “阶级” 你指的是HTTP假设:// WWW。 vlsm-calc.net/ipclasses.php,你可能应该指出,如果是这样的话,或者如果不是这样的话。如果是这种情况,你只能指出一个班级。包含多个类的数据集,以及您的预期结果可以帮助其他人更好地理解您的问题。 – Kritner

+0

我其实指的是任何东西。尝试忽略192.168.1后的所有内容。并从192.168.1.0/24的所有地址获得相同的值 – Adam

回答

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 
+0

按预期工作。谢谢。 – Adam