如何在单个语句中替换/删除字符串中的多个单词

时间:2013-06-07 12:36:44

标签: sql oracle oracle9i

我在一列中有一个包含完整水体名称的表格。即:

  • 金湖
  • 蓝水湖
  • 马斯科卡河
  • 桑迪湾

我想选择水的名称,但不是水的类型[湖泊,河流等...]

单独使用:

select replace(watername, 'Lake') from water;

但是,我希望在一个选择语句中捕获5种不同的水类型。

2 个答案:

答案 0 :(得分:5)

您可以使用regexp_replace函数使用正则表达式进行替换,例如:

select regexp_replace('Golden Lake, Blue Water Lake, Muskoka River, Sandy B
ay', '( Lake)|( River)|( Bay)', '') from dual

编辑:因为它是9i,你可以尝试创建像this方法这样的函数。

或者,你最终可能会做一些奇怪/丑陋的选择。

答案 1 :(得分:2)

由于您使用的是9i,最简单的解决方案是使用多个REPLACE:

with v_data as (
  select 'Golden Lake' name from dual union all
  select 'Blue Water Lake' name from dual union all
  select 'Muskoka River' name from dual union all
  select 'Sandy Bay' name from dual 
)  
select replace(
  replace(
    replace(name,
            ' Lake',
            ''),
    ' Bay',
    ''),
   ' River',
   '')
  from v_data

(我在每个子模式之前添加了一个空格,以避免结果中出现尾随空格。)

或者,您可以尝试loading a Java class for Regular Expressions into the database并使用它。