Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция REPLACE() в Oracle

В 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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Невалиден SQL идентификатор

  2. Добавете първичен ключ за автоматично увеличение към съществуващата таблица в oracle

  3. Може ли операторът IN да използва заместващи знаци LIKE (%) в Oracle?

  4. Zip с помощта на Oracle Stored Procedure

  5. Обединяване на ODP.NET връзки:Как да разберете дали е използвана връзка