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: