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()erstattetaogt(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) | +---------------+