在Postgres的WHERE中使用正则表达式


78

我目前有以下查询:

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

我该如何重写它,以便正则表达式位于如下所示的位置(不起作用):

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

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

Answers:


137

写:

select * from table where name ~ 'foo'

“〜”运算符针对正则表达式是否匹配产生布尔结果,而不是提取匹配的子组。


2
〜运算符有替代方法吗?我正在使用解析查询的javascript库,不幸的是,它无法识别〜及其任何变体。
马丁

@Martin您可以尝试使用简化了正则表达式支持的SIMILAR TO, SELECT * FROM table WHERE name SIMILAR TO 'foo' 请参阅此处文档以了解更多详细信息
Josh Frankel

@JoshFrankel:我在某处(我认为是关于stackoverflow的)读到,类似TO的性能较差。
尼娜(Nina)

@Nina可能,我不确定是临时使用的。SIMILAR TO使用正则表达式功能,但未完全实现它们,这可能使其成为特殊情况,因此性能较低。我更喜欢~正则表达式运算符,因为与SIMILAR TO相比,实现什么和不实现什么没有什么惊奇
Josh Frankel

@JoshFrankel:这个案子怎么样? codereview.stackexchange.com/questions/221146/… 这是我最近发布的一个问题
Nina,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.