最近,我们已经从MySQL更改为PostgreSQL。除了带有Mysql 'REGEXP‘关键字的查询之外,大多数查询都已被翻译:
MySQL (prepared statement):
SELECT * FROM table WHERE ? REGEXP identifier;我们有一个“表”,其中一列被称为“标识符”。此“identifier”列包含实际的正则表达式模式。
因此,它不是在查询中对regexp模式进行“硬编码”,而是在标识符列中查找该模式。
在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出于测试目的,我创建了许多记录,其中"identifier“列包含'.*‘作为值( match everything的正则表达式),但仍然得不到适当的结果。
非常欢迎您的帮助,谢谢!
发布于 2012-11-26 20:38:57
也许问题出在某个regexp字符串中?(如错误字符串所示)
我已经测试过
SELECT *
FROM table1 t
WHERE 'cat' ~ t.reg;这对我来说很管用。这是我的SQL小提琴。http://sqlfiddle.com/#!12/f245c/3
问题可能出在不同的regexp解释中。有关postgresql regexp的详细信息,请单击此处http://www.postgresql.org/docs/current/static/functions-matching.html
更新程序还可以阅读http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS以获取有关postgresql字符串的详细信息。您需要这样才能正确地编写regexp。
https://stackoverflow.com/questions/13564369
复制相似问题