【问题标题】:Using regex in WHERE in Postgres在 Postgres 的 WHERE 中使用正则表达式
【发布时间】:2015-02-04 04:42:37
【问题描述】:

我目前有以下查询:

select regexp_matches(name, 'foo') from table;

我怎样才能重写它,以便正则表达式位于如下位置(不起作用):

select * from table where regexp_matches(name, 'foo');

当前的错误信息是: 错误:WHERE 的参数必须是布尔类型,而不是文本类型 [] SQL 状态:42804 字符:29

【问题讨论】:

    标签: regex postgresql


    【解决方案1】:

    改写:

    select * from table where name ~ 'foo'
    

    '~' 运算符生成一个布尔结果来判断正则表达式是否匹配,而不是提取匹配的子组。

    【讨论】:

    • 有没有替代 ~ 操作符?我正在使用一个解析查询的 javascript 库,不幸的是,它无法识别 ~ 及其任何变体。
    • @Martin 您可以尝试使用 SIMILAR TO,它已经取消了对正则表达式的支持 SELECT * FROM table WHERE name SIMILAR TO 'foo' 请参阅documentation here 了解更多详情
    • @JoshFrankel:我在某处(我认为在 stackoverflow 上)读到 SIMILAR TO 的性能更差。
    • @Nina 可能我不确定。 SIMILAR TO 使用正则表达式功能,但没有完全实现它们,这可能使其成为一种特殊情况,因此性能较低。我更喜欢 ~ 正则表达式运算符,因为对于 SIMILAR TO 的实现和未实现的内容没有任何意外
    • @JoshFrankel:这个案子呢? codereview.stackexchange.com/questions/221146/…这是我最近发的一个问题
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2021-08-28
    • 2017-01-18
    相关资源
    最近更新 更多