如何从VARCHAR2类型的列中选择子字符串?

时间:2013-11-11 09:53:18

标签: sql oracle oracle11g oracle9i

假设我的表格如下所示:

TEXT
-----
King Queen Jack King Queen
King Jack Queen Ace Jack Queen King
Queen Ace Queen King Queen Jack

我需要输出

案例1:

TEXT
-----
Queen Jack King Queen
Queen Ace Jack Queen
Queen Ace Queen King Queen

案例2:

TEXT
-----
Queen Jack King Queen
Queen Ace Jack Queen
Queen Ace Queen

如何使用Oracle 11g / 10g / 9i中的select进行此操作?

1 个答案:

答案 0 :(得分:4)

您可以使用正则表达式。
case1'。+'在'Queen'的第一次和最后一次出现之间的任何事情的贪婪匹配 case2'。+?'在'女王'的第一次和后续发生之间的任何事情都不情愿地匹配

select 
  regexp_substr( myColumn, 'Queen.+Queen' ) as Case1
, regexp_substr( myColumn, 'Queen.+?Queen' ) as Case2
from (
  select 'King Queen Jack King Queen' as myColumn
  from dual
  union all
  select 'King Jack Queen Ace Jack Queen King' as myColumn
  from dual
  union all
  select 'Queen Ace Queen King Queen Jack' as myColumn
  from dual
);