使用预定义正则表达式的另一个表选择值

时间:2014-05-17 20:54:42

标签: sql regex postgresql select

我想用我的预定义正则表达式在我的另一个表中选择表格中的行 您可以在下面看到我的示例表:

code

id   |  codename
-----+------------
1    |   123456
2    |   NF123
3    |   AAA444
4    |   EEE123
5    |   EEE423
6    |   AB123E

validcode

 id   |  validreg
------+-----------
 1    |   [E]{3}[0-9]{3}
 2    |   NF123

以下是sqlfidlle上的测试用例。

这是我尝试过的我的选择语句之一,但它不起作用:

SELECT n.codename FROM code n
WHERE EXISTS (SELECT * FROM validcode WHERE n.codename ~* E'^' || validreg || '$');

我收到此错误:

ERROR: argument of WHERE must be type boolean, not type text:
SELECT codename FROM code n WHERE EXISTS (SELECT * FROM validcode WHERE n.codename ~* E'^' || validreg || '$');

有可能以某种方式这样做吗?

1 个答案:

答案 0 :(得分:2)

SELECT n.codename FROM code n, validcode
WHERE  n.codename ~* ('^' || validcode.validreg || '$')

支持,因为否则解析器认为n.codename ~* E'^'是其中一部分,而其余部分则连接起来。

此外,您的原始查询也适用于其他大括号。