Postgres中的正则表达式

时间:2019-11-01 18:51:02

标签: regex postgresql sequence numeric

全部。

我正在查询Postgres 9.3数据库,以在字段中查找特定模式:

SELECT
 P.id, P.processo_id, PR.num_formated
FROM
 publications P
INNER JOIN processos PR ON PR.id=P.processo_id
WHERE
 --The first numeric sequence must be exact 4 digits length, so the initial \d{4}
 PR.num_formated ~ '\d{4}[\.\-\\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}'
AND
 P.id=781291700 --Just to force a specific record

其中PR.num_formated被定义为"character varying(255)"。执行后,查询返回:

  P.id      P.processo_id        PR.num_formated
781291700     502707245    20190001418-14.1998.8.05.0103

我的问题是:为什么Postgres“忽略”第一个\ d?它解释正则表达式的形式是否不同于“传统/常规/正统/任何”方式,因为同一个正则表达式可以在我系统的另一部分中很好地工作,但是使用ruby代码,因此在形式上有什么特殊性吗?

预先感谢

Walid

1 个答案:

答案 0 :(得分:1)

前7个字符被忽略,因为查询将模式作为字符串的一部分。如果要匹配整个字符串,请使用^$ constraints.

'^\d{4}[\.\-\\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}$'
相关问题