PostgreSQL如何替换仅含单连字符的单元格为0且不影响负数?
解决方案
你之前的写法会匹配所有位置的连字符、加上全局替换参数g,所以会误替换负数的负号,改用以下两种方案都可以实现需求:
- 方法1:调整
regexp_replace的正则模式
把正则规则改为匹配整个单元格仅为单个连字符的规则,SQL写法参考:
regexp_replace("M1KW", '^-$', '0')
这里^代表字符串开头,$代表字符串结尾,组合后只会命中内容完全等于-的单元格,不会影响负数前缀的负号,也不需要加全局替换的g参数。
- 方法2:用条件判断逻辑更直观
如果你的数据库支持CASE WHEN语句,可以直接判断值是否为单个连字符再替换,可读性更高不容易出错:
CASE WHEN "M1KW" = '-' THEN '0' ELSE "M1KW" END
替换完成后即可直接将列转换为numeric类型执行后续计算。
示例数据:
内容的提问来源于stack exchange,提问作者shazriq
相关产品推荐
相关产品推荐

