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ąpionoa
it
(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) | +---------------+