如何预编译正则表达式



PostgreSQL的正则表达式表示为字符串(text DataType(,

SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'::text);

所以很自然地想象它是一个动态参数...但是不,不可能动态...此查询"未能从未知到文本中找到转换函数"

SELECT regexp_matches('foobarbequebaz', (SELECT '(bar)(beque)') );

...因此,我们可以想象重复使用正则表达式的中介,作为预编译。PostgreSQL V10?

可能可能

错误消息与"动态"值或"预编译"值无关。它只是告诉您(SELECT '(bar)(beque)')的结果具有未知的数据类型,但是regexp_matches()期望text

因此,您需要将结果施放给文本:

SELECT regexp_matches('foobarbequebaz', (SELECT '(bar)(beque)')::text );

如果您想通过其他地方传递表达式,则可以这样做:

with list_of_expressions (expression) as (
  values 
   ('(bar)(beque)'),
   ('(foo)')
)
SELECT regexp_matches('foobarbequebaz',  expression)
from list_of_expressions;

当然list_of_expressions也可能是您数据库中的表格。

最新更新