我试图从地址中截断前导零。例如:
输入
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';
非常感谢提前
答案 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+
用于捕获剩余的字字符_
。