In Oracle, de TRANSLATE()
Met deze functie kunt u meerdere één-op-één-vervangingen van één teken maken in één bewerking.
Het retourneert de tekenreeks die als eerste argument is opgegeven nadat enkele tekens die in het tweede argument zijn gespecificeerd, zijn vertaald in een doelset van tekens die in het derde argument zijn gespecificeerd.
Het is vergelijkbaar met de REPLACE()
functie, behalve dat de REPLACE()
functie vervangt de hele tekenreeks door een andere tekenreeks (d.w.z. niet teken voor teken, zoals TRANSLATE()
doet).
Syntaxis
De syntaxis gaat als volgt:
TRANSLATE(expr, from_string, to_string)
De functie retourneert expr
met alle voorkomens van elk teken in from_string
vervangen door het bijbehorende teken in to_string
.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT
TRANSLATE('Cat', 'at', 'ow')
FROM DUAL;
Resultaat:
Cow
Hier, de a
en t
tekens zijn vervangen door o
en w
.
In dit geval is de REPLACE()
functie zou hetzelfde resultaat hebben opgeleverd. Hier zijn de twee functies naast elkaar:
SELECT
TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL;
Resultaat:
TRANSLATE REPLACE ____________ __________ Cow Cow
In dit geval is de uitkomst voor beide functies hetzelfde, maar om verschillende redenen.
Dit is wat elke functie deed:
TRANSLATE()
vervangena
ent
(elk afzonderlijk teken)REPLACE()
vervangenat
(de string)
Gemengde volgorde
Dit voorbeeld laat zien waar TRANSLATE()
verschilt van REPLACE()
. In dit voorbeeld verander ik de volgorde van de tekens die moeten worden vervangen, evenals de tekens om ze te vervangen:
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL;
Resultaat:
TRANSLATE REPLACE ____________ __________ Cow Cat
In dit geval alleen de TRANSLATE()
functie in werking is getreden. Dit komt omdat deze functie elk teken één voor één doorloopt. De REPLACE()
functie daarentegen zoekt naar de hele string, in precies dezelfde volgorde.
Een krachtiger voorbeeld
Dit voorbeeld demonstreert een scenario waarin de TRANSLATE()
functie heeft een aanzienlijk voordeel ten opzichte van de REPLACE()
functie:
SELECT
TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL;
Resultaat:
2*(3+4)/(7-2)
Om het equivalente resultaat te krijgen met de REPLACE()
functie, moeten we dit doen:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
)
FROM DUAL;
Resultaat:
2*(3+4)/(7-2)
Het bovenstaande voorbeeld is gebaseerd op de Microsoft-documentatie voor de T-SQL TRANSLATE()
functie, die vergelijkbaar is met de Oracle-versie.
Geen overeenkomst
Als er geen overeenkomsten zijn, TRANSLATE()
geeft de string ongewijzigd terug:
SELECT
TRANSLATE('Cat', 'x', 'y')
FROM DUAL;
Resultaat:
Cat
Hoofdlettergevoeligheid
De TRANSLATE()
functie voert een hoofdlettergevoelige overeenkomst uit:
SELECT
TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL;
Resultaat:
Cat
In dit voorbeeld kwam de case niet overeen, en dus werd de originele string ongewijzigd geretourneerd.
Lege snaren
Dit is wat er gebeurt als een lege string wordt doorgegeven voor elk gegeven argument:
SET NULL 'null';
SELECT
TRANSLATE('Cat', 'at', '') AS r1,
TRANSLATE('Cat', '', 'ow') AS r2,
TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL;
Resultaat:
R1 R2 R3 _______ _______ _______ null null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Spatieteken
De lege tekenreeks is niet hetzelfde als het spatieteken.
Dit is wat er gebeurt als we de lege tekenreeks in een spatie veranderen:
SELECT
TRANSLATE('Cat', 'at', ' ') AS r1,
TRANSLATE('Cat', ' ', 'ow') AS r2,
TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL;
Resultaat:
R1 R2 R3 _____ ______ _____ C Cat
Hier is een voorbeeld dat illustreert hoe TRANSLATE()
en REPLACE()
verschillende resultaten retourneren bij gebruik van het spatieteken:
SELECT
TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL;
Resultaat:
TRANSLATE REPLACE ____________ __________ C Cow
Nullargumenten
Doorgeven van null
voor elk argument retourneert 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;
Resultaat:
1 2 3 _______ _______ _______ null null null
Ontbrekende argumenten
TRANSLATE()
. aanroepen zonder het doorgeven van argumenten resulteert in een fout:
SELECT TRANSLATE()
FROM DUAL;
Resultaat:
Error starting at line : 1 in command - SELECT TRANSLATE() 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:
Te veel argumenten
En het doorgeven van te veel argumenten levert een fout op:
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL;
Resultaat:
Error starting at line : 1 in command - SELECT TRANSLATE('Cat', 'a', 'b', 'c') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: