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

OracleのREPLACE()関数

    Oracleでは、REPLACE() 関数を使用すると、文字列の一部を別の文字列に置き換えることができます。

    この関数は、文字列、置換する部分文字列、および置換文字列(部分文字列を置換する)の3つの引数を受け入れます。

    置換文字列を省略できます。その場合、関数は部分文字列のすべてのインスタンスを削除します。

    構文

    構文は次のようになります:

    REPLACE(char, search_string
            [, replacement_string ]
           )

    char 文字列、search_string 置換する部分文字列であり、replacement_string その部分文字列を置き換える文字列です。

    基本的な例は次のとおりです。

    SELECT 
        REPLACE('Barrier Island', 'Island', 'Reef')
    FROM DUAL;

    結果:

    Barrier Reef

    この場合、サブストリングIslandを置き換えました Reefを使用 。

    複数の一致

    置換される文字列が文字列内で複数回出現する場合、すべての出現が置換されます:

    SELECT 
        REPLACE('Black dogs and white dogs', 'dog', 'cat')
    FROM DUAL;

    結果:

    Black cats and white cats

    一致なし

    文字列に部分文字列が含まれていない場合は、REPLACE() 文字列を変更せずに返します:

    SELECT 
        REPLACE('Barrier Island', 'to entry', 'Reef')
    FROM DUAL;

    結果:

    Barrier Island

    部分文字列を削除する

    3番目の引数を省略すると、文字列から部分文字列が削除されます:

    SELECT 
        REPLACE('Black dogs and white dogs', ' dogs')
    FROM DUAL;

    結果:

    Black  and white 

    よく見ると、部分文字列にスペースを指定しなかったため、スペースが残っていることがわかります。

    ここでもスペースが含まれています:

    SELECT 
        REPLACE('Black dogs and white dogs', ' dogs')
    FROM DUAL;

    結果:

    Black  and white 

    大文字と小文字の区別

    REPLACE() 関数は大文字と小文字を区別して一致を実行します:

    SELECT 
        REPLACE('Barrier Island', 'island', 'reef')
    FROM DUAL;

    結果:

    Barrier Island

    この例では、大文字と小文字が一致しなかったため、元の文字列は変更されずに返されました。

    空の文字列

    指定された引数ごとに空の文字列が渡されると、次のようになります。

    SELECT 
        REPLACE(' ', 'dog', 'cat') AS "1",
        REPLACE('Black dog', ' ', 'cat') AS "2",
        REPLACE('Black dog', 'dog', ' ') AS "3"
    FROM DUAL;

    結果:

       1            2         3 
    ____ ____________ _________ 
         Black dog    Black    

    したがって、この場合:

    • 最初の文字列に空の文字列を渡すと、空の文字列が返されます。
    • 2番目の引数に空の文字列を渡すと、元の文字列が返されます。
    • 3番目の引数に空の文字列を渡すと、置き換えられる文字列が文字列から削除されます。

    スペース文字

    空の文字列はスペース文字と同じではありません。

    空の文字列をスペースに変更すると、次のようになります。

    SELECT 
        REPLACE(' ', 'dog', 'cat') AS "1",
        REPLACE('Black dog', ' ', 'cat') AS "2",
        REPLACE('Black dog', 'dog', ' ') AS "3"
    FROM DUAL;

    結果:

       1              2          3 
    ____ ______________ __________ 
         Blackcatdog    Black     

    したがって、文字列がスペースにすぎない場合は、それを別の文字列に置き換えることができます。

    SELECT REPLACE(' ', ' ', 'cat')
    FROM DUAL;

    結果:

    cat

    ヌル引数

    nullを渡す 引数ごとに、空の文字列を渡すように機能します:

    SET NULL 'null';
    SELECT 
        REPLACE(null, 'dog', 'cat') AS "1",
        REPLACE('Black dog', null, 'cat') AS "2",
        REPLACE('Black dog', 'dog', null) AS "3"
    FROM DUAL;

    結果:

          1            2         3 
    _______ ____________ _________ 
    null    Black dog    Black    

    デフォルトでは、SQLclおよびSQL * Plusは、nullの場合は常に空白を返します。 SQL SELECTの結果として発生します 声明。

    ただし、SET NULLは使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。

    引数がありません

    REPLACE()を呼び出す 引数を渡さないとエラーが発生します:

    SELECT REPLACE()
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT REPLACE()
    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 REPLACE('Cat', 'a', 'b', 'c')
    FROM DUAL;

    結果:

    Error starting at line : 1 in command -
    SELECT REPLACE('Cat', 'a', 'b', 'c')
    FROM DUAL
    Error at Command Line : 1 Column : 8
    Error report -
    SQL Error: ORA-00939: too many arguments for function
    00939. 00000 -  "too many arguments for function"
    *Cause:    
    *Action:

    1. PostgreSQLでのロールとロール属性の管理

    2. MySQLのLEN()と同等のものは何ですか?

    3. MySQLがいくつかの外部キーを削除する

    4. データベースクエリ:干し草の山から針を見つける方法は?