use*_*196 4 sql oracle oracle9i
我在一列中有一个包含完整水体名称的表格.即:
我想选择水的名称,但不是水的类型[湖泊,河流等...]
我个人使用:
select replace(watername, 'Lake') from water;
Run Code Online (Sandbox Code Playgroud)
但是,我希望在一个选择语句中捕获5种不同的水类型.
You can use a regex for the replace, using regexp_replace function, for example:
select regexp_replace('Golden Lake, Blue Water Lake, Muskoka River, Sandy B
ay', '( Lake)|( River)|( Bay)', '') from dual
Run Code Online (Sandbox Code Playgroud)
Edit: Since it's 9i, you could try creating a function like this approach.
Or, you may end up doing some weird/ugly select.
由于您使用的是 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
Run Code Online (Sandbox Code Playgroud)
(我在每个子模式之前添加了一个空格,以避免结果中出现尾随空格)。
或者,您可以尝试将正则表达式的 Java 类加载到数据库中并使用它。