如何从字符串中提取任何“-字母”组合并将其放入自己的列中?

问题描述 投票:0回答:1

如果我有如下地址:

地址
1234-C 史密斯大道

如何从现有字符串中提取“-C”并将“STE C”或“C”放入其自己的列中,并将其他所有内容保留在单独的列中?

(不包括将原始地址列拉入地址行 1 列(如果该列为 NULL)的代码部分。AKA 未找到匹配项) 我有以下类似案例的现有代码:

CASE WHEN
database.table.address LIKE ‘%-[a-zA-Z]%’
THEN
SUBSTR(database.table.address,DECODE(INSTR(database.table.address, ‘-[a-zA-Z]’),0,NULL,INSTR,(database.table.address,‘-[a-zA-Z]’)))

END “address line 2”

CASE WHEN
database.table.address LIKE ‘%-[a-zA-Z]%’
THEN
SUBSTR(database.table.address,0,INSTR(database.table.address, ‘-[a-zA-Z]’)-1)

END “address line 1”

我当前的输出是:

地址行1
1234-C 史密斯大道

我想要的输出是:

地址行1 地址行2
1234 史密斯大道 STE C

或:

地址行1 地址行2
1234 史密斯大道 C

我想我可能没有完全理解正则表达式,因为如果我用 STE 之类的东西替换 -[a-zA-Z] ,这个确切的代码就可以工作(假设地址中有 STE,它会提取它,另外我是不知道如何分隔这些列,而不将所有内容拉到子字符串左侧(我在地址行 1 中搜索)以及子字符串右侧的所有内容(我在地址行 2 中搜索)。 谢谢!!

sql regex oracle street-address
1个回答
0
投票

这将返回您所要求的内容,但是 - 也许您应该发布更多关于您拥有和您想要的示例。

样本数据:

SQL> with test (col) as
  2    (select '1234-C SMITH AVE' from dual)

查询:

  3  select regexp_replace(col, '-[[:alpha:]]') line_1,
  4         ltrim(regexp_substr(col, '-[[:alpha:]]'), '-') line_2
  5  from test;

LINE_1         LINE_2
-------------- -------
1234 SMITH AVE C

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.