【问题标题】:How to use LIKE on inet field in Postgres如何在 Postgres 的 inet 字段上使用 LIKE
【发布时间】:2013-04-17 22:13:40
【问题描述】:

我需要执行以下查询:

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

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

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

【问题讨论】:

    标签: postgresql sql-like inet


    【解决方案1】:

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

    SELECT * FROM users WHERE ip << inet '88.99.0.0/16';
    

    【讨论】:

    • 谢谢。知道如何在 SQLAlchemy 等 ORM 中使用它吗?
    【解决方案2】:

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

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

    虽然它的效率会低于“How to use LIKE on inet field in Postgres”。

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

    【讨论】:

    • 本例中的数据类型为inet,尽量避免所有数据的强制转换。
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多