Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как работи функцията TRANSLATE() в SQL Server (T-SQL)

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL:Изтриване на всички дублиращи се редове, но запазване на един

  2. Как да деактивирате всички ограничения на външния ключ в базата данни на SQL Server - SQL Server / TSQL урок, част 77

  3. Използвайте IDENT_CURRENT() за връщане на текущата стойност на самоличността в колона за самоличност в SQL Server

  4. 3 начина да получите името на месеца от дата в SQL Server (T-SQL)

  5. Разлика между ляво и дясно присъединяване в SQL Server