如何将LIKE用于Inet列



我的数据库中有一个名为mgmt的列,它是inet类型的

我想这样做:

select * from source
where mgmt LIKE inet('10.208.6%')

但这会给出错误"error:类型inet的无效输入语法:">

知道如何将LIKE子句用于inet类型吗?

第一个想法:

铸造成文本然后尝试:

WHERE mgmt::text LIKE '10.208.6%'

第二个想法:

试试这个

WHERE mgmt BETWEEN inet('10.208.60.0') AND inet('10.208.69.255')

(或者,更准确地说,因为您的通配符同时涵盖660s(

WHERE (mgmt BETWEEN inet('10.208.60.0') AND inet('10.208.69.255'))
OR (mgmt BETWEEN inet('10.208.6.0') AND inet('10.208.6.255'))

第三个想法:

如果您只想检查6范围,请使用<<运算符检查IP范围:

WHERE mgmt << inet('10.208.6/24')

我将使用<<运算符执行inet操作:

postgres=# SELECT '192.168.1.1'::inet << '192.168.1.0/24'::inet;
?column? 
----------
t
(1 row)
postgres=# SELECT '192.168.10.1'::inet << '192.168.1.0/24'::inet;
?column? 
----------
f
(1 row)

但是,如果出于某种原因您真的必须使用ILIKE,您可以转换为文本:

postgres=# SELECT text('192.168.10.1'::inet) ilike '192.168.1%';
?column? 
----------
t
(1 row)

更多信息可在文件中找到

最新更新