截断postgresql中字符串的前导零

时间:2014-05-20 01:05:05

标签: postgresql

我试图从地址中截断前导零。例如:

输入

1 06TH ST
12 02ND AVE
123 001St CT

预期产出

1 6TH ST
12 2ND AVE
123 1St CT

这就是我所拥有的:

update table
set address = regexp_replace(address,'(0\d+(ST|ND|TH))','?????? need help here')
where address ~ '\s0\d+(ST|ND|TH)\s';

非常感谢提前

2 个答案:

答案 0 :(得分:1)

假设地址总是有一些数字/字母地址(1234,1a,33B),后面跟着一个1或更多空格的序列,后跟你要去除前导零的部分......

select substr(address, 1, strpos(address, ' ')) || ltrim(substr(address, strpos(address, ' ')), ' 0') from table;

或者,要更新表格:

update table set address = substr(address, 1, strpos(address, ' ')) || ltrim(substr(address, strpos(address, ' ')), ' 0');

-g

答案 1 :(得分:1)

您正在寻找的是正则表达式中的back references

UPDATE table
   SET address = regexp_replace(address, '\m0+(\d+\w+)', '\1', 'g')
 WHERE address ~ '\m0+(\d+\w+)'

此外:

  • \m用于匹配单词的开头(以避免替换内部单词(101Th中的f.ex.)
  • 0+截断全部零(不包括在捕获括号中)
  • \d+用于捕获剩余数字
  • \w+用于捕获剩余的字符
  • 字符可以是任何字母数字字符,以及下划线_