W SQL Server, T-SQL TRANSLATE() funkcja zwraca ciąg znaków podany jako pierwszy argument po tym, jak niektóre znaki podane w drugim argumencie zostaną przetłumaczone na docelowy zestaw znaków określony w trzecim argumencie.
Jest podobny do REPLACE() funkcji, ale z pewnymi istotnymi różnicami.
TRANSLATE() funkcja wymaga 3 argumentów; ciąg wejściowy, znaki do zastąpienia i znaki do zastąpienia.
Składnia
Składnia wygląda tak:
TRANSLATE ( inputString, characters, translations)
Gdzie ciąg wejściowy jest ciągiem zawierającym znaki, które mają zostać zastąpione.
znaki argument określa, które znaki należy zastąpić.
tłumaczenia argument określa, czym te znaki powinny zostać zastąpione.
Przykład 1 – Podstawowe użycie
Oto przykład tego, jak to działa:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result; Wynik:
+----------+ | Result | |----------| | Cow | +----------+
W tym przykładzie a i t znaki zostały zastąpione przez o i at .
W tym przypadku REPLACE() funkcja dałaby ten sam wynik. Oto dwie funkcje obok siebie:
SELECT
TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE',
REPLACE('Cat', 'at', 'ow') AS 'REPLACE';
Wynik:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cow | +-------------+-----------+
W tym przypadku wynik dla obu funkcji jest taki sam, ale z różnych powodów.
Oto, co zrobiła każda funkcja:
TRANSLATE()zastąpionoait(każda indywidualna postać)REPLACE()zastąpionoat(ciąg)
Przykład 2 – Zamówienie mieszane
Ten przykład pokazuje, gdzie TRANSLATE() różni się od REPLACE() . W tym przykładzie zmieniam kolejność znaków do zastąpienia, a także znaki, które mają je zastąpić:
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE',
REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';
Wynik:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cat | +-------------+-----------+
W tym przypadku tylko TRANSLATE() funkcja zaczęła obowiązywać. Dzieje się tak, ponieważ ta funkcja przechodzi przez każdy znak jeden po drugim. REPLACE() z drugiej strony, szuka całego ciągu w dokładnie tej samej kolejności.
Przykład 3 – mocniejszy przykład
Poniższy przykład jest oparty na dokumentacji firmy Microsoft dla TRANSLATE() funkcjonować. Pokazuje scenariusz, w którym ta funkcja ma znaczną przewagę nad REPLACE() funkcja:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Wynik:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+
Aby uzyskać równoważny wynik za pomocą REPLACE() funkcji, musielibyśmy to zrobić:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
) AS Result;
Wynik:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+