sql >> データベース >  >> RDS >> Oracle

OracleのTRANSLATE()関数

    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:

    1. このテーブルで重複する連続した値を見つけるにはどうすればよいですか?

    2. LinuxファイルシステムとPostgreSQLチェックポイントベンチマーク

    3. EnterpriseEditionでNOEXPANDヒントを使用するもう1つの理由

    4. SQLステートメントのバックティックと角括弧の違いは何ですか?