如果我有如下地址:
地址 |
---|
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> 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>