在一个表中,我们有多行记录登录的IP地址。这些天,我们也从IPv6地址登录。
我试图找到一种列出所有具有IPv6条目的行的方法。
任何建议,我们将不胜感激。
谢谢。
答案 0 :(得分:2)
大概,您可以执行以下操作:
select t.*
from t
where not regexp_like(ip, '[0-9]{1-3}.[0-9]{1-3}.[0-9]{1-3}.[0-9]{1-3}')
或更简单地说:
select t.*
from t
where ip like '%:%' -- ipv6 contains colons
答案 1 :(得分:0)
因为IPv6地址的大小为128位,每个冒号后面都有4位数字,所以我们可以这样:
create table ns_tab3 (val varchar(100));
insert into ns_tab3 values('2002:2002:2002:2002:2002:2002:2002:2002');
insert into ns_tab3 values('2002:2432:2432:2543:2974:2002:2002:2002');
insert into ns_tab3 values('2002:2002:2002:2002:2002:2002:2002:2432');
insert into ns_tab3 values('2002:2002:2002:2002:2002:2002:2002:1920');
insert into ns_tab3 values('2002:2002:2002:2002:2002:2002:2002:0201');
select * from ns_tab3;
select * from ns_tab3 where regexp_like(val,'[0-9]{4}:[0-9]{4}:[0-9]{4}:[0-9]{4}:[0-
9]{4}:[0-9]{4}:[0-9]{4}:[0-9]{4}');