使用列数据作为正则表达式匹配的模式

时间:2012-11-26 11:56:04

标签: regex postgresql

最近,我们已经从MySQL改为PostgreSQL。除了使用Mysql' REGEXP'之外,大多数查询都已被翻译。关键字:

MySQL (prepared statement):
SELECT * FROM table WHERE ? REGEXP identifier;

我们有一个'表',其中一列被称为'标识符'。这个标识符' column包含实际的正则表达式模式。

所以,而不是硬编码'查询中的正则表达式模式,它查找模式的标识符列。

在Postgresql中,我们需要使用'〜'关键字而不是' REGEXP'一个(仅限MySQL),但使用Postgresql我似乎无法从列中提取模式。

我尝试过以下查询但没有成功:

SELECT * FROM table WHERE 'test' ~ "identifier";
ERROR:  invalid regular expression: parentheses () not balanced


SELECT * FROM table WHERE "identifier" ~ 'test';
-> no results

出于测试目的,我创建了许多记录,其中"标识符"列包含'。*'作为值(匹配所有内容的正则表达式),但我仍然没有得到适当的结果。

非常欢迎帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

也许问题出在其中一个正则表达式字符串中? (正如错误字符串所示)

我已经测试了

SELECT *
FROM table1 t
WHERE 'cat' ~ t.reg;

它对我有用。这是我的SQL小提琴。 http://sqlfiddle.com/#!12/f245c/3

问题可能出在不同的正则表达式解释中。有关postgresql regexp的详细信息http://www.postgresql.org/docs/current/static/functions-matching.html

UPD还有关于postgresql字符串的详细信息,请阅读http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS。你需要这个正确地写正则表达式。