11

我需要执行以下查询:

SELECT * FROM users WHERE ip LIKE '88.99.%';

问题是inet数据类型似乎不支持通配符(至少不是我在前面的查询中使用它们的方式)。

我想知道的是在指定LIKE过滤器之前将字段转换为字符串是否是明智之举?(另一方面,这可能会减慢整个查询,即使方法本身是有效的。)

4

2 回答 2

29

对此类查询使用子网运算符。'88.99.0.0/16'应该这样做:

SELECT * FROM users WHERE ip << inet '88.99.0.0/16';
于 2013-04-24T11:33:47.440 回答
11

如果您想进行字符串比较,另一个对我有用的选项是:

SELECT * FROM users WHERE TEXT(ip) LIKE '88.99.%';

尽管它比“如何在 Postgres 的 inet 字段上使用 LIKE ”效率低。

参考:https ://www.postgresql.org/docs/8.2/static/functions-net.html

于 2016-05-31T14:16:33.383 回答