sql >> Database teknologi >  >> RDS >> Oracle

TRANSLATE() Funktion i Oracle

I Oracle er TRANSLATE() funktionen giver dig mulighed for at foretage flere enkelttegn, en-til-en udskiftninger i én operation.

Det returnerer strengen, der er angivet som et første argument, efter at nogle tegn, der er angivet i det andet argument, er oversat til et destinationssæt af tegn, der er angivet i det tredje argument.

Det ligner REPLACE() funktion, bortset fra at REPLACE() funktion erstatter hele strengen med en anden streng (dvs. ikke tegn for tegn, såsom TRANSLATE() gør).

Syntaks

Syntaksen ser sådan ud:

TRANSLATE(expr, from_string, to_string) 

Funktionen returnerer expr med alle forekomster af hvert tegn i from_string erstattet af dets tilsvarende tegn i to_string .

Eksempel

Her er et grundlæggende eksempel:

SELECT 
    TRANSLATE('Cat', 'at', 'ow')
FROM DUAL; 

Resultat:

Ko

Her er a og t tegn blev erstattet med o og w .

I dette tilfælde er REPLACE() funktion ville have givet det samme resultat. Her er de to funktioner side om side:

SELECT 
  TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
  REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL; 

Resultat:

 OVERSÆT ERSTAT ____________ __________ Ko Ko 

I dette tilfælde er resultatet for begge funktioner det samme, men af ​​forskellige årsager.

Her er, hvad hver funktion gjorde:

  • TRANSLATE() erstattet a og t (hver enkelt karakter)
  • REPLACE() erstattet at (strengen)

Blandet rækkefølge

Dette eksempel viser hvor TRANSLATE() adskiller sig fra REPLACE() . I dette eksempel ændrer jeg rækkefølgen af ​​de tegn, der skal erstattes, samt de tegn, der skal erstatte dem:

SELECT 
  TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
  REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL; 

Resultat:

 OVERSÆT ERSTAT ____________ __________ Ko kat 

I dette tilfælde kun TRANSLATE() funktion trådte i kraft. Dette skyldes, at denne funktion gennemgår hvert tegn en efter en. REPLACE() funktion på den anden side søger efter hele strengen, i nøjagtig samme rækkefølge.

Et mere kraftfuldt eksempel

Dette eksempel viser et scenarie, hvor TRANSLATE() funktionen har en betydelig fordel i forhold til REPLACE() funktion:

SELECT 
    TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL; 

Resultat:

2*(3+4)/(7-2)

For at få det tilsvarende resultat ved hjælp af REPLACE() funktion, skal vi gøre dette:

SELECT REPLACE ( REPLACE ( REPLACE ( REPLACE ( '2*[3+4]/{7-2}', '[', '(' ), ']', ')' ), '{', '(' ), '}', ')' ) FROM DUAL;

Resultat:

2*(3+4)/(7-2)

Ovenstående eksempel er baseret på Microsoft-dokumentationen for T-SQL TRANSLATE() funktion, som ligner Oracle-versionen.

Ingen match

Hvis der ikke er nogen match, TRANSLATE() returnerer strengen uændret:

SELECT 
  TRANSLATE('Cat', 'x', 'y')
FROM DUAL; 

Resultat:

Kat

Skrivar og bogstaver

TRANSLATE() funktion udfører et match, der skelner mellem store og små bogstaver:

SELECT 
  TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL; 

Resultat:

Kat

I dette eksempel matchede sagen ikke, og derfor blev den oprindelige streng returneret uændret.

Tomme strenge

Her er, hvad der sker, når en tom streng sendes for hvert givet argument:

SET NULL 'null';
SELECT 
  TRANSLATE('Cat', 'at', '') AS r1,
  TRANSLATE('Cat', '', 'ow') AS r2,
  TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL; 

Resultat:

 R1 R2 R3 _______ _______ _______ null null null 

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Mellemrumstegn

Den tomme streng er ikke det samme som mellemrumstegnet.

Her er, hvad der sker, når vi ændrer den tomme streng til et mellemrum:

SELECT 
  TRANSLATE('Cat', 'at', ' ') AS r1,
  TRANSLATE('Cat', ' ', 'ow') AS r2,
  TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL; 

Resultat:

 R1 R2 R3 _____ ______ _____ C Kat 

Her er et eksempel, der illustrerer, hvordan TRANSLATE() og REPLACE() returnere forskellige resultater, når du bruger mellemrumstegnet:

SELECT 
    TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
    REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL;  

Resultat:

 OVERSÆT ERSTAT ____________ __________ C Ko 

Nul-argumenter

Sender null for ethvert argument returnerer null :

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

Resultat:

 1 2 3 _______ _______ _______ null null null 

Manglende argumenter

Kalder TRANSLATE() uden at sende nogen argumenter resulterer det i en fejl:

SELECT TRANSLATE()
FROM DUAL; 

Resultat:

Fejl starter på linje :1 i kommando -SELECT TRANSLATE()FROM DUALE Fejl på kommandolinje :1 Kolonne :8Fejlrapport -SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:

For mange argumenter

Og at sende for mange argumenter returnerer en fejl:

SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL; 

Resultat:

Fejl starter på linje :1 i kommando -SELECT TRANSLATE('Cat', 'a', 'b', 'c')FRA DUALE Fejl på kommandolinje:1 Kolonne:8Fejlrapport -SQL-fejl:ORA-00909:ugyldigt antal argumenter00909. 00000 - "ugyldigt antal argumenter"*Årsag:*Handling:

  1. Strengsammenkædningsoperatør i Oracle, Postgres og SQL Server

  2. Sådan aktiverer du generelle logfiler og fejllogfiler i AWS RDS

  3. Henvis til en tabel i et andet skema og udelad skemanavn

  4. 2nd Quadrant ved PostgresConf US 2018