在MySQL中,我需要选择字段不是IP地址的所有行(例如12.32.243.43)。这可以仅用MySQL完成吗?
例如:我尝试了以下但不匹配。
select * from mytable where field not like '%.%.%.%'
答案 0 :(得分:2)
当然可以。你会找到类似的东西:
SELECT * FROM `table` WHERE NOT( some_field REGEXP '^[0-9+]\.[0-9]+\.[0-9+]\.[0-9+]')
答案 1 :(得分:2)
如果不要求使用正则表达式,则应提供解决方案:
select stringBasedIp from x
where inet_aton(stringBasedIp) is null;
select stringBasedIp, (inet_aton(stringBasedIp) is null) as isInvalidIp
from x;
示例数据:
create table x(stringBasedIp varchar(16));
insert into x values
('255.255.255.255'),
('0.0.0.0'),
('0.0.0.300'),
('0.0.0.-1'),
('0.0.0.A'),
('192.168.0.1'),
('400.168.0.1'),
('12.32.243.43'),
('12.32.243.430');
以下是无效的IP列表:
STRINGBASEDIP
0.0.0.300
0.0.0.-1
0.0.0.A
400.168.0.1
12.32.243.430