【发布时间】:2012-11-13 21:38:10
【问题描述】:
最近,我们已从 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
出于测试目的,我创建了许多记录,其中“标识符”列包含 '.*' 作为值(匹配所有内容的正则表达式),但我仍然没有得到适当的结果。
非常欢迎帮助,谢谢!
【问题讨论】:
-
为什么在引号中使用列名?尝试不使用它们。
-
@sufleR 这不是问题。 postgresql中使用双引号来指定列/表/模式/函数的确切名称...
-
我们需要查看您的实际正则表达式模式。请在问题中或作为 sqlfiddle 提供对您失败的示例行。
标签: regex postgresql