Разница между REPLACE и TRANSLATE:
- REPLACE заменяет одну строку на другую.
- TRANSLATE заменяет символы в одном наборе на символы в другом.
- Ни TRANSLATE, ни REPLACE не обновляют базу данных.
Вот несколько примеров:
create table nada (id number(8), description nvarchar2(30));
insert into nada values (1, "I like peanuts.");
insert into nada values (2, 'Peanuts are not a nut.');
insert into nada values (3, 'peanuts are a legume.');
commit;
select * from nada;
Id Description
-- ------------------------
1 I like peanuts.
2 Peanuts are not a nut.
3 peanuts are a legume.
REPLACE работает так:
select replace(description, 'peanuts', 'tomatoes') from nada;
дает:
replace(description,'peanuts','tomatoes')
--------------------------------------
I like tomatoes.
Peanuts are not a nut.
tomatoes are a legume.
Просто слово «арахис» заменяется на «помидоры».Он чувствителен к регистру, поэтому «Арахис» не заменяется.
TRANSLATE работает следующим образом:
select translate(description, ' .', '_!') from nada;
translate(description, ' .', '_!')
----------------------------------
I_like_peanuts!
Peanuts_are_not_a_nut!
peanuts_are_a_legume!
Все пробелы заменены на подчеркивания и все периоды заменяются на взрывы!
Ни ПЕРЕВОД, ни ЗАМЕНА не обновляют базу данных.Они просто меняют значение в заявлении.Конечно, вы можете использовать это значение для обновления базы данных, если хотите.Например:
select replace(description, 'peanuts', 'tomatoes') from nada;
select * from nada;
Таблица остается прежней :
Id Description
-- ------------------------
1 I like peanuts.
2 Peanuts are not a nut.
3 peanuts are a legume.
Если вы хотите изменить таблицу, поместите ее в инструкцию UPDATE или INSERT, например:
update nada set description = replace(description, 'peanuts', 'tomatoes');
commit;
Теперь это изменилось:
select * from nada;
Id Description
-- ------------------------
1 I like tomatoes.
2 Peanuts are not a nut.
3 tomatoes are a legume.
Теперь, если вы хотите также исправить арахис, вы можете использовать REGEXP_REPLACE.