我的地址格式类似于
123,abc street,Dallas,Tx 75701,500-998-7898,路线X Y Z west 的
我希望删除与5位数字格式或5位数字+ 4位数字格式以及加拿大邮政编码格式(如Y89 567或Y89567)相匹配的美国格式的邮政编码后的任何内容。
所以我的最终答案应该是这样的。
123,abc street,Dallas,Tx 75701
感谢任何帮助。
答案 0 :(得分:1)
这是一种方法。请注意,任何"看起来像"美国或加拿大的邮政编码将被假定为一个。此外,你会错过Beverly Hills, Calif. 90210
之类的东西,因为" Calif。"不是"见过"作为州代码。我也有点粗心;如果邮政编码后面有任何内容,则不应该是字母或数字。我没有写过"测试"为了那个原因;如果需要,可以留下锻炼身体。
我假设如果没有找到邮政编码,则必须返回整个输入字符串。
with
inputs ( addr ) as (
select '123, abc street, Dallas, Tx 75701, 500-998-7898' from dual union all
select '336 Main St, New City, NZ 39023-8882, john.d@email' from dual union all
select '837B Hilltop, Canadian City, ON Z34802 4028048 kilo' from dual union all
select '12345 Circle Drive, Lakeview, MN' from dual
)
select addr,
regexp_substr( addr,
'(.*?([[:alpha:]]{2} \d{5}(-\d{4})?|[[:alpha:]]\d{2} ?\d{3}|$))',
1, 1, null, 1) as clean_addr
from inputs
;
ADDR CLEAN_ADDR
--------------------------------------------------- --------------------------------------
123, abc street, Dallas, Tx 75701, 500-998-7898 123, abc street, Dallas, Tx 75701
336 Main St, New City, NZ 39023-8882, john.d@email 336 Main St, New City, NZ 39023-8882
837B Hilltop, Canadian City, ON Z34802 4028048 kilo 837B Hilltop, Canadian City, ON Z34802
12345 Circle Drive, Lakeview, MN 12345 Circle Drive, Lakeview, MN