В SQL Server, T-SQL TRANSLATE() функцията връща низа, предоставен като първи аргумент, след като някои знаци, посочени във втория аргумент, са преведени в целеви набор от знаци, посочени в третия аргумент.
Това е подобно на REPLACE() функция, но с някои важни разлики.
TRANSLATE() функцията изисква 3 аргумента; входния низ, знаците, които трябва да бъдат заменени, и знаците, които да ги заменят.
Синтаксис
Синтаксисът е така:
TRANSLATE ( inputString, characters, translations)
Където inputString е низът, който съдържа знаците, които трябва да бъдат заменени.
знаците Аргументът указва кои знаци трябва да бъдат заменени.
преводите Аргументът указва с какво трябва да бъдат заменени тези знаци.
Пример 1 – Основна употреба
Ето пример за това как работи:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result; Резултат:
+----------+ | Result | |----------| | Cow | +----------+
Така че в този пример, a и t знаците бяха заменени с o и w .
В този случай, REPLACE() функцията би довела до същия резултат. Ето двете функции една до друга:
SELECT
TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE',
REPLACE('Cat', 'at', 'ow') AS 'REPLACE';
Резултат:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cow | +-------------+-----------+
В този случай резултатът и за двете функции е един и същ, но по различни причини.
Ето какво направи всяка функция:
TRANSLATE()замененaиt(всеки отделен знак)REPLACE()замененat(низът)
Пример 2 – Смесена поръчка
Този пример демонстрира къде TRANSLATE() се различава от REPLACE() . В този пример променям реда на знаците, които трябва да бъдат заменени, както и знаците, които да ги заменят:
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE',
REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';
Резултат:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cat | +-------------+-----------+
В този случай само TRANSLATE() функцията влезе в сила. Това е така, защото тази функция преминава през всеки знак един по един. REPLACE() функцията от друга страна търси целия низ, в абсолютно същия ред.
Пример 3 – По-мощен пример
Следният пример се базира на документацията на Microsoft за TRANSLATE() функция. Той демонстрира сценарий, при който тази функция има значително предимство пред REPLACE() функция:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Резултат:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+
За да получите еквивалентен резултат, използвайте REPLACE() функция, ще трябва да направим това:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
) AS Result;
Резултат:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+