任何人都可以告诉我替换功能和放大器之间的区别吗?翻译Oracle的功能?
我读到某处替换使数据库中的更改永久保留,而翻译没有,是否正确?
任何人都可以显示查询,证明替换确实会在数据库中永久更改吗?
答案 0 :(得分:3)
这两个函数都没有进行永久性更改 - 只有在使用UPDATE
时,并且在提交事务之后,才进行“永久性”更改...直到在该列上运行下一个更新语句;)
这两个功能的运作方式不同:
SELECT translate('1tech23', '123', '456') AS translate,
replace('1tech23', '123', '456') AS replace
FROM DUAL
...返回:
translate replace
-------------------
4tech56 1tech23
答案 1 :(得分:2)
REPLACE和TRANSLATE之间的区别:
以下是一些例子:
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.
'花生'这个词被'西红柿'取代。这是区分大小写的,所以'Peanuts'没有被替换。
TRANSLATE 的工作原理如下:
select translate(description, ' .', '_!') from nada;
translate(description, ' .', '_!') ---------------------------------- I_like_peanuts! Peanuts_are_not_a_nut! peanuts_are_a_legume!
所有空格都更改为下划线和所有句点都更改为刘海!
TRANSLATE或REPLACE都不会更新数据库。他们只是改变了价值 在一份声明中。当然,您可以使用该值来更新数据库 你要。例如:
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.
现在,如果你想修复'Peanuts',你也可以使用REGEXP_REPLACE。