1 つの列に完全な水域名を含むテーブルがあります。すなわち:
- ゴールデン レイク
- ブルー ウォーター レイク
- マスコーカ川
- サンディ ベイ
水の名前を選択したいのですが、水の種類 [湖、川など...] は選択しません。
個人的には、私は以下を使用します:
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 クラスをデータベースにロードして使用することもできます。