2013-06-07 5 views
3

У меня есть таблица, содержащая полное имя водяного знака в одной колонке. то есть: озероКак заменить/удалить несколько слов из строки в одном заявлении

  • Golden Lake
  • Blue Water
  • Muskoka реки
  • Sandy Bay

Я хотел бы, чтобы выбрать название воды, но не тип воды [озеро, река, ect ...]

Отдельно, пользуюсь:

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

Но есть 5 разных типов воды, которые я надеялся поймать в одном отборе.

ответ

2

Поскольку вы используете 9i, самым простым решением было бы использовать несколько Заменяет:

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 и использовать это.

+0

Спасибо. Сначала я использовал несколько замен, но не думал о конечных пробелах. Слишком плохо, что он не мог быть таким же элегантным, как решение регулярного выражения. – user1873196

4

Вы можете использовать регулярное выражение для замены, используя regexp_replace функцию, например:

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

Edit: Так как это 9i, вы могли бы попробовать создать функцию, как this подход.

Или вы можете в конечном итоге сделать какой-то странный/уродливый выбор.

+0

Похоже, это было бы прекрасно, однако я нахожусь в базе данных 9i, и это недопустимый идентификатор. Существует ли equivalant для старых БД Oracle? – user1873196

+2

@ IHawk Я бы предложил добавить пространство перед каждым типом (т. Е. «(Озеро) | (река) | (залив)») - в противном случае результат будет содержать конечные пробелы (которые обычно не нужны). –

+1

@ user1873196 Вы уже упомянули свою версию (Oracle 9i довольно древняя, поэтому обычно вы можете смело предполагать не менее 10 г, регулярные выражения добавлены в 10g). Tagged oracle9i. –

Смежные вопросы