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: