3

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

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

我们有一个“表”,其中一列称为“标识符”。此“标识符”列包含实际的正则表达式模式。

因此,它不是在查询中对正则表达式模式进行“硬编码”,而是查找该模式的标识符列。

在 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

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

非常欢迎帮助,谢谢!

4

1 回答 1

3

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

我测试过

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

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

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

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

于 2012-11-26T12:38:56.820 回答