小编典典

在第二个和第三个逗号之间获取值

sql

我试图从所有内容都在一个列中的地址中提取状态,这是一个示例:

2901 MAIN ST,CORNING,NY,14830

我一直在尝试找出如何使用substrinstr一起做,但是我似乎无法掌握instr。这是我到目前为止的内容:

select substr('hello,hello,NY,11725-1234',1,instr('hello,hello,NY,11725-1234',',',2,3))
from dual;

我以为它会从第二个逗号开始,到第三个逗号结束,并且让我的所有内容介于两者之间,但事实并非如此。

任何帮助表示赞赏。


阅读 188

收藏
2021-05-05

共1个答案

小编典典

select 
  regexp_substr('2901 MAIN ST,CORNING,NY,14830', '(.*?,){2}(.*?),', 1, 1, '', 2) 
from dual

一般来说,

n_th_component := 
  regexp_substr(string, '(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2);

例子:

select 
  n,  
  regexp_substr('2901 MAIN ST,CORNING,NY,14830', 
                '(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2)
from (select level n from dual connect by level <= 4)
2021-05-05