PostgreSQL正则提取单引号前含小数数字报错问题咨询
解决PostgreSQL正则表达式中单引号的转义问题
这问题我太熟悉了!你碰到的是SQL里字符串单引号转义的经典坑——因为PostgreSQL用单引号来界定字符串常量,所以你正则表达式里的(?=')里的单引号会被数据库误判成字符串的结束标记,直接导致语法错误。
修正后的SQL语句
把正则里的单个单引号改成两个连续的单引号就搞定了,这是SQL标准的单引号转义方式:
SUBSTRING(long_text, '[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)(?='')') as substring_feet
为什么这么改?
在PostgreSQL的字符串中,两个连续的单引号会被解析成一个实际的单引号字符。这样你的正则表达式里的正向预查(?='')就会正确匹配目标文本里的单个单引号,而不会提前截断你的正则字符串。
举个实际例子
如果你的long_text字段值是:
'19.5' feet tall或者'-0.75' inch
用修正后的语句就能精准提取出19.5和-0.75,完全符合你想要的“提取单引号前的数字(含小数、正负号)”的需求。
内容的提问来源于stack exchange,提问作者Beeman




