我在一列中有一个包含完整水体名称的表格。即:
我想选择水的名称,但不是水的类型[湖泊,河流等...]
单独使用:
select replace(watername, 'Lake') from water;
但是,我希望在一个选择语句中捕获5种不同的水类型。
答案 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并使用它。