pgsql筛选中⽂字符正则_正则表达式–PostgreSQL:正则表达
式转义函数
为了放弃阅读整个问题,我的基本问题是:
PostgreSQL中是否有⼀个函数来转义字符串中的正则表达式字符?
我已经探测过⽂档,但⽆法到这样的功能.
这是完整的问题:
在PostgreSQL数据库中,我有⼀个包含唯⼀名称的列.我还有⼀个定期在此字段中插⼊名称的进程,并且为了防⽌重复,如果需要输⼊已存在的名称,它会在末尾附加⼀个空格和括号.
即姓名,姓名(1),姓名(2),姓名(3)等
就⽬前⽽⾔,我使⽤以下代码来查要在系列中添加的下⼀个数字(⽤plpgsql编写):
var_name_id := 1;
SELECT CAST(substring(a.name from E'\\((\\d+)\\)$') AS int)
INTO var_last_name_id
FROM my_table.names a
WHERE a.name LIKE var_name || ' (%)'
ORDER BY CAST(substring(a.name from E'\\((\\d+)\\)$') AS int) DESC
LIMIT 1;
IF var_last_name_id IS NOT NULL THEN
var_name_id = var_last_name_id + 1;
END IF;
var_new_name := var_name || ' (' || var_name_id || ')';
(var_name包含我要插⼊的名称.)
这适⽤于现在,但问题在于WHERE语句:
js中文正则表达式
WHERE a.name LIKE var_name || ' (%)'
此检查不会验证所讨论的%是否为数字,并且它不会考虑多个括号,如“Name((1))”,如果存在任何⼀种情况,则会抛出强制转换异常.
WHERE语句确实需要更像:
WHERE a.r1_name ~* var_name || E' \\(\\d+\\)'
但var_name可能包含正则表达式字符,这导致上⾯的问题:PostgreSQL中是否有⼀个函数可以转义字符串中的正则表达式字符,所以我可以这样做:
WHERE a.r1_name ~* regex_escape(var_name) || E' \\(\\d+\\)'
⾮常感谢任何建议,包括可能重复我的重复名称解决⽅案.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。