W Oracle REPLACE()
funkcja umożliwia zastąpienie części ciągu innym ciągiem.
Funkcja przyjmuje trzy argumenty:ciąg, podciąg do zastąpienia i zastępczy ciąg (w celu zastąpienia podciągu).
Możesz pominąć ciąg zastępczy, w którym to przypadku funkcja usunie wszystkie wystąpienia podciągu.
Składnia
Składnia wygląda tak:
REPLACE(char, search_string
[, replacement_string ]
)
Gdzie char
jest ciągiem, search_string
jest podciągiem do zastąpienia, a replacement_string
jest ciągiem, którym należy zastąpić ten podciąg.
Przykład
Oto podstawowy przykład:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Wynik:
Barrier Reef
W tym przypadku zastąpiliśmy podciąg Island
z Reef
.
Wiele meczów
Jeśli ciąg, który ma zostać zastąpiony, występuje wiele razy w ciągu, wszystkie wystąpienia są zastępowane:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Wynik:
Black cats and white cats
Brak dopasowania
Jeśli podciąg nie występuje w ciągu, REPLACE()
zwraca ciąg niezmieniony:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Wynik:
Barrier Island
Usuń podciąg
Pominięcie trzeciego argumentu usuwa podciąg z ciągu:
SELECT
REPLACE('Black dogs and white dogs', 'dogs')
FROM DUAL;
Wynik:
Black and white
Jeśli przyjrzysz się uważnie, zauważysz, że spacje nadal pozostają, ponieważ nie określiliśmy żadnych spacji w podłańcuchu.
Oto znowu z uwzględnioną spacją:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Wynik:
Black and white
Wrażliwość na wielkość liter
REPLACE()
funkcja wykonuje dopasowanie z uwzględnieniem wielkości liter:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Wynik:
Barrier Island
W tym przykładzie wielkość liter się nie zgadzała, więc oryginalny ciąg został zwrócony bez zmian.
Puste ciągi
Oto, co się dzieje, gdy dla każdego podanego argumentu zostanie przekazany pusty ciąg:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Wynik:
1 2 3 ____ ____________ _________ Black dog Black
Więc w tym przypadku:
- Przekazanie pustego ciągu dla początkowego ciągu zwraca pusty ciąg.
- Przekazanie pustego ciągu dla drugiego argumentu zwraca oryginalny ciąg.
- Przekazanie pustego ciągu dla trzeciego argumentu usuwa ciąg, który ma zostać zastąpiony z ciągu.
Znak spacji
Pusty ciąg to nie to samo, co znak spacji.
Oto, co się dzieje, gdy zmieniamy pusty ciąg na spację:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Wynik:
1 2 3 ____ ______________ __________ Blackcatdog Black
Dlatego jeśli ciąg jest tylko spacją, możemy go zastąpić innym ciągiem:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Wynik:
cat
Argumenty zerowe
Przekazywanie null
dla każdego argumentu działa jak przekazanie pustego ciągu:
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;
Wynik:
1 2 3 _______ ____________ _________ null Black dog Black
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Brakujące argumenty
Wywołanie REPLACE()
bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT REPLACE()
FROM DUAL;
Wynik:
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:
Zbyt wiele argumentów
A przekazanie zbyt wielu argumentów zwraca błąd:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Wynik:
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: