Další novou zajímavou funkcí pro práci s řetězci v SQL Serveru 2017 je funkce TRANSLATE(), která funguje jako šikovná náhrada více REPLACE() funkcí vnořených do sebe. Funkce má tři vstupní parametry:
TRANSLATE ( inputString, characters, translations)
- inputString je řetězec, v němž chceme provést nahrazení
- characters jsou znaky, které chceme nahradit
- translactions jsou znaky, které chceme nově vložit
Ukázkový příklad pak vypadá takto:
SELECT 'TRANSLATE(''[Hi]'', ''[]'', ''()'')' FceCall, TRANSLATE('[Hi]', '[]', '()') Result UNION ALL SELECT 'TRANSLATE(''[Hi sir]'', ''[sir]'', ''(man)'')', TRANSLATE('[Hi sir]', '[sir]', '(man)') GO
Na prvním řádku vidíme jednoduché nahrazení dvou různých znaků dvěma novými znaky.
Druhý řádek nám ilustruje, jak se chová celá funkce ještě názorněji: nahrazuje se tu znak za znak, takže jsme sice jakoby nahradili slovo “sir” slovem “man”, ovšem jak vidíme na výstupním řetězci, ve skutečnosti jsme řekli, že chceme každé písmeno “i” nahradit písmenem “a”.
Pokud bychom chtěli řádek 1 zapsat postaru pomocí řetězení REPLACE() funkcí, kód by vypadal takto:
SELECT REPLACE(REPLACE('[Hi]', '[', '('), ']', ')')
Důležité pravidlo, které musíme dodržet je, že hodnoty parametrů characters a translactions musí mít stejnou délku, jinými slovy, musíme mít vždy dvoji starých/nových znaků k nahrazení:
SELECT TRANSLATE('abc', 'ab', 'c')