I SQL Server, T-SQL TRANSLATE()
funktion returnerer den streng, der er angivet som et første argument, efter 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, men med nogle vigtige forskelle.
TRANSLATE()
funktion kræver 3 argumenter; inputstrengen, de tegn, der skal erstattes, og de tegn, der skal erstatte dem.
Syntaks
Syntaksen ser sådan ud:
TRANSLATE ( inputString, characters, translations)
Hvor inputString er den streng, der indeholder de tegn, der skal erstattes.
tegnene argument angiver, hvilke tegn der skal erstattes.
oversættelserne argument angiver, hvad disse tegn skal erstattes med.
Eksempel 1 – Grundlæggende brug
Her er et eksempel på, hvordan det virker:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;
Resultat:
+----------+ | Result | |----------| | Cow | +----------+
Så i dette eksempel 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';
Resultat:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cow | +-------------+-----------+
I dette tilfælde er resultatet for begge funktioner det samme, men af forskellige årsager.
Her er, hvad hver funktion gjorde:
TRANSLATE()
erstatteta
ogt
(hver enkelt karakter)REPLACE()
erstattetat
(strengen)
Eksempel 2 – 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';
Resultat:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cat | +-------------+-----------+
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.
Eksempel 3 – Et mere kraftfuldt eksempel
Følgende eksempel er baseret på Microsoft-dokumentationen for TRANSLATE()
fungere. Det viser et scenarie, hvor denne funktion har en betydelig fordel i forhold til REPLACE()
funktion:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Resultat:
+---------------+ | Result | |---------------| | 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}', '[', '(' ), ']', ')' ), '{', '(' ), '}', ')' ) AS Result;
Resultat:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+