Oracleでは、TRANSLATE() 関数を使用すると、1回の操作で複数の1文字の1対1の置換を行うことができます。
2番目の引数で指定された一部の文字が、3番目の引数で指定された宛先の文字セットに変換された後、最初の引数として提供された文字列を返します。
REPLACE()に似ています REPLACE()を除いて関数 関数は、文字列全体を別の文字列に置き換えます(つまり、TRANSLATE()のように文字ごとではありません
構文
構文は次のようになります:
TRANSLATE(expr, from_string, to_string)
この関数はexprを返します from_string内の各文字のすべての出現 to_stringの対応する文字に置き換えられました 。
例
基本的な例は次のとおりです。
SELECT
TRANSLATE('Cat', 'at', 'ow')
FROM DUAL; 結果:
Cow
ここで、a およびt 文字はoに置き換えられました およびw 。
この場合、REPLACE() 関数は同じ結果を生成します。 2つの機能を並べて示します。
SELECT
TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL; 結果:
TRANSLATE REPLACE ____________ __________ Cow Cow
この場合、両方の関数の結果は同じですが、理由が異なります。
各関数の機能は次のとおりです。
-
TRANSLATE()aを置き換えました およびt(個々のキャラクター) -
REPLACE()atを置き換えました (文字列)
混合注文
この例は、TRANSLATE()の場所を示しています REPLACE()とは異なります 。この例では、置き換える文字の順序と、それらを置き換える文字を変更します。
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL; 結果:
TRANSLATE REPLACE ____________ __________ Cow Cat
この場合、TRANSLATE()のみ 機能が有効になりました。これは、この関数が各文字を1つずつ処理するためです。 REPLACE() 一方、関数は、文字列全体をまったく同じ順序で検索します。
より強力な例
この例は、TRANSLATE()が 関数には、REPLACE()よりも大きな利点があります 機能:
SELECT
TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL; 結果:
2*(3+4)/(7-2)
REPLACE()を使用して同等の結果を取得するには 関数、これを行う必要があります:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
)
FROM DUAL; 結果:
2*(3+4)/(7-2)
上記の例は、T-SQL TRANSLATE()に関するMicrosoftのドキュメントに基づいています。 関数。これはOracleバージョンに似ています。
一致なし
一致するものがない場合は、TRANSLATE() 文字列を変更せずに返します:
SELECT
TRANSLATE('Cat', 'x', 'y')
FROM DUAL; 結果:
Cat
大文字と小文字の区別
TRANSLATE() 関数は大文字と小文字を区別して一致を実行します:
SELECT
TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL; 結果:
Cat
この例では、大文字と小文字が一致しなかったため、元の文字列は変更されずに返されました。
空の文字列
指定された引数ごとに空の文字列が渡されると、次のようになります。
SET NULL 'null';
SELECT
TRANSLATE('Cat', 'at', '') AS r1,
TRANSLATE('Cat', '', 'ow') AS r2,
TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL; 結果:
R1 R2 R3 _______ _______ _______ null null null
デフォルトでは、SQLclおよびSQL * Plusは、nullの場合は常に空白を返します。 SQL SELECTの結果として発生します 声明。
ただし、SET NULLは使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。
スペース文字
空の文字列はスペース文字と同じではありません。
空の文字列をスペースに変更すると、次のようになります。
SELECT
TRANSLATE('Cat', 'at', ' ') AS r1,
TRANSLATE('Cat', ' ', 'ow') AS r2,
TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL; 結果:
R1 R2 R3 _____ ______ _____ C Cat
TRANSLATE()の方法を示す例を次に示します。 およびREPLACE() スペース文字を使用すると、異なる結果が返されます:
SELECT
TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL; 結果:
TRANSLATE REPLACE ____________ __________ C Cow
ヌル引数
nullを渡す 引数はnullを返します :
SET NULL 'null';
SELECT
TRANSLATE(null, 'dog', 'cat') AS "1",
TRANSLATE('Black dog', null, 'cat') AS "2",
TRANSLATE('Black dog', 'dog', null) AS "3"
FROM DUAL; 結果:
1 2 3 _______ _______ _______ null null null
引数がありません
TRANSLATE()の呼び出し 引数を渡さないとエラーが発生します:
SELECT TRANSLATE()
FROM DUAL; 結果:
Error starting at line : 1 in command - SELECT TRANSLATE() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
引数が多すぎます
そして、あまりにも多くの引数を渡すとエラーが返されます:
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL; 結果:
Error starting at line : 1 in command -
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 - "invalid number of arguments"
*Cause:
*Action: