5

1 つの列に完全な水域名を含むテーブルがあります。すなわち:

  • ゴールデン レイク
  • ブルー ウォーター レイク
  • マスコーカ川
  • サンディ ベイ

水の名前を選択したいのですが、水の種類 [湖、川など...] は選択しません。

個人的には、私は以下を使用します:

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

しかし、単一の選択ステートメントでキャッチしたいと思っていた 5 つの異なる水の種類があります。

4

2 に答える 2

5

regexp_replace関数を使用して、置換に正規表現を使用できます。次に例を示します。

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

編集:9iなので、このアプローチのような関数を作成してみてください。

または、奇妙な/醜い選択を行うことになるかもしれません。

于 2013-06-07T12:50:52.737 に答える
3

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 クラスをデータベースにロードして使用することもできます。

于 2013-06-07T13:21:09.357 に答える