In SQL Server is de T-SQL TRANSLATE()
functie retourneert de tekenreeks die als eerste argument is opgegeven nadat enkele tekens die in het tweede argument zijn opgegeven, zijn vertaald in een doelset van tekens die zijn opgegeven in het derde argument.
Het is vergelijkbaar met de REPLACE()
functie, maar met enkele belangrijke verschillen.
De TRANSLATE()
functie vereist 3 argumenten; de invoerreeks, de tekens die moeten worden vervangen en de tekens die ze moeten vervangen.
Syntaxis
De syntaxis gaat als volgt:
TRANSLATE ( inputString, characters, translations)
Waar inputString is de tekenreeks die de tekens bevat die moeten worden vervangen.
De tekens argument specificeert welke karakters vervangen moeten worden.
De vertalingen argument specificeert waarmee die tekens moeten worden vervangen.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld van hoe het werkt:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;
Resultaat:
+----------+ | Result | |----------| | Cow | +----------+
Dus in dit voorbeeld is 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';
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)
Voorbeeld 2 – Gemengde bestelling
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';
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.
Voorbeeld 3 – Een krachtiger voorbeeld
Het volgende voorbeeld is gebaseerd op de Microsoft-documentatie voor de TRANSLATE()
functie. Het demonstreert een scenario waarin deze functie een aanzienlijk voordeel heeft ten opzichte van de REPLACE()
functie:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Resultaat:
+---------------+ | Result | |---------------| | 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}', '[', '(' ), ']', ')' ), '{', '(' ), '}', ')' ) AS Result;
Resultaat:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+