更改仍然永久更改?

时间:2011-07-04 03:41:26

标签: sql oracle

任何人都可以告诉我替换功能和放大器之间的区别吗?翻译Oracle的功能?

我读到某处替换使数据库中的更改永久保留,而翻译没有,是否正确?

任何人都可以显示查询,证明替换确实会在数据库中永久更改吗?

2 个答案:

答案 0 :(得分:3)

这两个函数都没有进行永久性更改 - 只有在使用UPDATE时,并且在提交事务之后,才进行“永久性”更改...直到在该列上运行下一个更新语句;)

这两个功能的运作方式不同:

SELECT translate('1tech23', '123', '456') AS translate,
       replace('1tech23', '123', '456') AS replace
  FROM DUAL

...返回:

translate  replace
-------------------
4tech56    1tech23

REPLACE取代提供的模式; TRANSLATE遍历字符串以一次处理替换字符(从左向右移动)

答案 1 :(得分:2)

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.

'花生'这个词被'西红柿'取代。这是区分大小写的,所以'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。