在我的表客户端中,我有一个名为“地址”的列,其中包含一些字段,例如:
UNIT 12a Street name
如何使用 Regex 将 stname 和 stnumber 拆分为 2 个单独的列?我的数据库中有数千个不同的街道名称。字符串中有 3 个可能性:
- 如果字符串为空,则两个新列都为空
如果只存在街道名称(无编号),则街道名称将移至 stname,而 stnumber 将为空。
如果字符串确实有数字,有时它就像Unit 12a ...有时它只是21c ...,在这种情况下,我想将Unit 12a或21c拆分为 stnumber 列,并将其余部分留给 stname 列。
我已经尝试过这种方法:
select test
--Group 1: Match everything up to the last digit, and one other character
--Group 2: Everything after group 1
,regexp_replace(test, '(.*[[:digit:]].)(.*)', '\1') c1
,regexp_replace(test, '(.*[[:digit:]].)(.*)', '\2') c2
from
(
select '1234john4345 this is a test.' test from dual union all
select '1234john4345a this is a test' test from dual
);
它确实几乎正确地拆分了它,除了字符串不包含数字的部分,它将记录复制到两列中。