从地址栏中提取城市

时间:2018-07-25 19:12:38

标签: sql oracle

enter image description here如果3号船和4号船为空,而2号船不为空,那应该是城市州会发生什么情况

这是图片中的样本数据。

4 个答案:

答案 0 :(得分:1)

我更喜欢老式的SUBSTR + INSTR组合,如果与Gordon和Barbaros的建议相比,它们的查询返回的甚至不包含逗号的字符串似乎要好一些,而OP则表示

  

从1个字母到1个逗号之间提取城市

这里是一个比较:

SQL> with tab (addr) as
  2  (
  3    select 'RALEIGH, NC 27604-3229'  from dual union all
  4    select 'SUITE A' from dual union all
  5    select 'COEUR D ALENE, ID 83815-8652' from dual union all
  6    select '*O/S CITY LIMITS*' from dual
  7  )
  8  select addr,
  9    substr(addr, 1, instr(addr, ',') - 1) littlefoot,
 10    --
 11    regexp_substr(addr, '[^,]+', 1, 1) gordon,
 12    regexp_substr(addr,'[^,]+') barbaros
 13  from tab;

ADDR                         LITTLEFOOT      GORDON               BARBAROS
---------------------------- --------------- -------------------- --------------------
RALEIGH, NC 27604-3229       RALEIGH         RALEIGH              RALEIGH
SUITE A                                      SUITE A              SUITE A
COEUR D ALENE, ID 83815-8652 COEUR D ALENE   COEUR D ALENE        COEUR D ALENE
*O/S CITY LIMITS*                            *O/S CITY LIMITS*    *O/S CITY LIMITS*

SQL>

答案 1 :(得分:0)

如果要在第一个逗号之前使用该部分,可以使用regexp_substr()

select regexp_substr(addr, '[^,]+', 1, 1)

答案 2 :(得分:0)

只需将PullParserregexp_substr模式一起使用

[^,]+

SQL Fiddle Demo 1

或者通过创建辅助表:

select regexp_substr(address,'[^,]+') as city
  from tab;

SQL Fiddle Demo 2

答案 3 :(得分:0)

如果您不想使用regexp,则可以使用:

select substr(city,1,(instr(city,',')-1))
  from mytable;