T-SQL

TRANSLATE() jako alternativa k řetězení REPLACE() funkcí

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')

 

Leave a Reply

Your email address will not be published. Required fields are marked *