You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:00:53