В Oracle, REPLACE()
функцията ви позволява да замените част от низ с друг низ.
Функцията приема три аргумента:низ, подниз за замяна и заместващ низ (за замяна на подниз).
Можете да пропуснете заместващия низ, като в този случай функцията ще премахне всички екземпляри на подниза.
Синтаксис
Синтаксисът е така:
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
Премахване на подниз
Пропускането на третия аргумент премахва подниза от низа:
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
Така че в този случай:
- Подаване на празен низ за първоначалния низ връща празен низ.
- Подаване на празен низ за втория аргумент връща оригиналния низ.
- Подаване на празен низ за третия аргумент премахва низа, който трябва да бъде заменен от низа.
Символ за интервал
Празният низ не е същият като символа за интервал.
Ето какво се случва, когато променим празния низ в интервал:
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: