PostgreSQL:使用REGEXP_REPLACE移除数字与字符间的空格
移除数字与字符间的单个空格问题解决
问题场景
你的medications表中medication_product_amount字段存在数字与字符间的单个空格,需要仅移除这类空格,保留其他位置的空格,示例如下:
输入:
medication_product_amount 1 UN DE 50 ML 20 UN 1 UN DE 600 G
期望输出:
new_medication_product_amount 1UN DE 50ML 20UN 1UN DE 600G
原正则的问题
你之前的正则(^[0-9])( )仅匹配行首单个数字后的空格,无法匹配多位数字(如20)后的空格,也匹配不了行中间数字(如50、600)后的空格,所以没有生效。
正确实现方案
使用以下REGEXP_REPLACE语句,匹配所有数字序列后紧跟的单个空格(且空格后是非数字非空格字符),并移除该空格:
SELECT REGEXP_REPLACE(medication_product_amount, '([0-9]+) ([^0-9 ])', '\1\2') AS new_medication_product_amount FROM medications;
正则解释
([0-9]+):捕获1个或多个连续数字,覆盖1、20、50这类单/多位数字:匹配数字后需要移除的单个空格([^0-9 ]):捕获一个既不是数字也不是空格的字符,确保只处理数字和字符之间的空格,不会误删其他空格\1\2:将匹配到的内容替换为「数字组」+「字符组」,去掉中间的空格
数据库语法差异说明
如果使用PostgreSQL,替换时需要用$1、$2代替\1、\2:
SELECT REGEXP_REPLACE(medication_product_amount, '([0-9]+) ([^0-9 ])', '$1$2') AS new_medication_product_amount FROM medications;
内容的提问来源于stack exchange,提问作者Mariana
相关产品推荐
相关产品推荐

