2011-07-04 3 views
1

交換機能の違いを教えてもらえますか& Oracleの翻訳機能ですか?交換のための変更は永久に残りますか?

私はどこかで、replaceがデータベースの変更を永続的な永続性を持たせないと読んだのですが、それは正しいですか?

置き換えがデータベース内の変更を永久に反映することを証明するクエリを表示できますか?

答えて

2

REPLACEとTRANSLATEの違い:

  • は代用品に別の文字列に1つの文字列を置換します。
  • 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! 

は前髪に変更されます!


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. 

「ピーナッツ」も修正したい場合は、REGEXP_REPLACEを使用できます。

+0

update文をtranslate節とともに使用するとどうなりますか?それでもレコードを更新しますか?あなたはそれについての例を見せてもらえますか? – Mike

+0

私はあなたがupdateコマンドでtranslateを使用するとき、データベースに更新が行われると仮定しています。私が間違っているなら、私を修正してください。 – Mike

3

どちらの機能が永久的な変更を行う - UPDATEを使用している場合のみ、トランザクションをコミットした後、「恒久的」変更が行われる...次の更新ステートメントは、その列上で実行されるまで;)

二つの機能は、異なる動作:

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

...リターンを:

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

REPLACEが提供するPAを置き換えますタタン; (左から右へ移動)時に置き換える文字を処理するために、文字列の上にTRANSLATE反復する

+0

ポニー:もしあなたがURLの下を見ると、それはデータベースとそれが私が混乱した理由を置き換えると言います...あなたはどちらが本当であるか確認できますか? "http:// www.geekinterview.com/question_details/25173#.ThE57GGQpvk' – Mike

+1

@Mike:" gomathi.e "の答えが間違っています。残りの答えは私のものと同じです。 –

関連する問題