0

MySQL では、フィールドが IP アドレスではないすべての行を選択する必要があります (例: 12.32.243.43)。これは MySQL のみで実行できますか?

例: 以下を試しましたが、一致しません。

select * from mytable where field not like '%.%.%.%' 
4

2 に答える 2

2

確かにできます。あなたは次のようなものを探しているでしょう:

SELECT * FROM `table` WHERE NOT( some_field REGEXP '^[0-9+]\.[0-9]+\.[0-9+]\.[0-9+]')
于 2012-04-29T05:03:17.820 に答える
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

ライブ テスト: http://www.sqlfiddle.com/#!2/2a4ec/1

于 2012-04-30T02:10:25.577 に答える