我有一张表格,其中一列包含完整的水名称。IE:
- 金湖
- 蓝水湖
- 马斯科卡河
- 桑迪湾
我想选择水的名称,而不是水的类型 [湖、河等...]
我个人使用:
select replace(watername, 'Lake') from water;
但是我希望在一个选择语句中捕获 5 种不同的水类型。
您可以使用正则表达式进行替换,使用regexp_replace函数,例如:
select regexp_replace('Golden Lake, Blue Water Lake, Muskoka River, Sandy B
ay', '( Lake)|( River)|( Bay)', '') from dual
编辑:因为它是 9i,你可以尝试创建一个类似这种方法的函数。
或者,您最终可能会做一些奇怪/丑陋的选择。
由于您使用的是 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
(我在每个子模式之前添加了一个空格,以避免结果中出现尾随空格)。
或者,您可以尝试将正则表达式的 Java 类加载到数据库中并使用它。