1

在我的表客户端中,我有一个名为“地址”的列,其中包含一些字段,例如:

UNIT 12a Street name

如何使用 Regex 将 stname 和 stnumber 拆分为 2 个单独的列?我的数据库中有数千个不同的街道名称。字符串中有 3 个可能性:

  1. 如果字符串为空,则两个新列都为空
  2. 如果只存在街道名称(无编号),则街道名称将移至 stname,而 stnumber 将为空。

  3. 如果字符串确实有数字,有时它就像Unit 12a ...有时它只是21c ...,在这种情况下,我想将Unit 12a21c拆分为 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
);

它确实几乎正确地拆分了它,除了字符串不包含数字的部分,它将记录复制到两列中。

4

0 回答 0