В 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) | +---------------+