V SQL Server T-SQL TRANSLATE()
funkce vrací řetězec zadaný jako první argument poté, co jsou některé znaky zadané ve druhém argumentu přeloženy do cílové sady znaků zadaných ve třetím argumentu.
Je to podobné jako REPLACE()
funkce, ale s některými důležitými rozdíly.
TRANSLATE()
funkce vyžaduje 3 argumenty; vstupní řetězec, znaky, které mají být nahrazeny, a znaky, které je mají nahradit.
Syntaxe
Syntaxe vypadá takto:
TRANSLATE ( inputString, characters, translations)
Kde inputString je řetězec obsahující znaky, které mají být nahrazeny.
postavy argument určuje, které znaky mají být nahrazeny.
překlady argument určuje, čím mají být tyto znaky nahrazeny.
Příklad 1 – Základní použití
Zde je příklad, jak to funguje:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;
Výsledek:
+----------+ | Result | |----------| | Cow | +----------+
V tomto příkladu tedy a
a t
znaky byly nahrazeny o
a w
.
V tomto případě REPLACE()
funkce by přinesla stejný výsledek. Zde jsou dvě funkce vedle sebe:
SELECT TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE', REPLACE('Cat', 'at', 'ow') AS 'REPLACE';
Výsledek:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cow | +-------------+-----------+
V tomto případě je výsledek pro obě funkce stejný, ale z různých důvodů.
Zde je to, co jednotlivé funkce dělaly:
TRANSLATE()
nahradila
at
(každý jednotlivý znak)REPLACE()
nahrazenoat
(řetězec)
Příklad 2 – Smíšené objednávky
Tento příklad ukazuje, kde je TRANSLATE()
se liší od REPLACE()
. V tomto příkladu změním pořadí znaků, které mají být nahrazeny, a také znaků, které je mají nahradit:
SELECT TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE', REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';
Výsledek:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cat | +-------------+-----------+
V tomto případě pouze TRANSLATE()
funkce vstoupila v platnost. Tato funkce totiž prochází každý znak jeden po druhém. REPLACE()
Funkce na druhé straně hledá celý řetězec v přesně stejném pořadí.
Příklad 3 – Výkonnější příklad
Následující příklad je založen na dokumentaci společnosti Microsoft pro TRANSLATE()
funkce. Ukazuje scénář, kde má tato funkce významnou výhodu oproti REPLACE()
funkce:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Výsledek:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+
Chcete-li získat ekvivalentní výsledek pomocí REPLACE()
funkci, musíme provést toto:
SELECT REPLACE ( REPLACE ( REPLACE ( REPLACE ( '2*[3+4]/{7-2}', '[', '(' ), ']', ')' ), '{', '(' ), '}', ')' ) AS Result;
Výsledek:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+