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

TRANSLATE(… ИЗПОЛЗВАНЕ) Функция в Oracle

В Oracle, TRANSLATE(...USING) функцията преобразува своя аргумент в набора от знаци, определен за преобразувания между набора от знаци на базата данни и националния набор от знаци.

Тази функция не трябва да се бърка с TRANSLATE() функция, която ви позволява да направите няколко едносимволни замествания един към един в една операция.

TRANSLATE(...USING) функцията се поддържа в Oracle предимно за съвместимост с ANSI. Oracle препоръчва да използваме TO_CHAR() и TO_NCHAR() функции вместо това.

Синтаксис

Синтаксисът е така:

TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Където char е изразът, който трябва да се преобразува, и:

  • Указване на USING CHAR_CS аргумент преобразува char в набора от знаци на базата данни. Типът на изходните данни е VARCHAR2 .
  • Указване на USING NCHAR_CS аргумент преобразува char в националния набор от характери. Типът на изходните данни е NVARCHAR2 .

Пример

Ето един основен пример:

SELECT 
    TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
    TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;

Резултат:

   CHAR_CS    NCHAR_CS 
__________ ___________ 
Cat        Cat        

За да демонстрираме разликата, ето какво се случва, когато го предадем на DUMP() функция:

SELECT 
    DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
    DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;

Резултат:

              CHAR_CS                       NCHAR_CS 
_____________________ ______________________________ 
Typ=1 Len=3: C,a,t    Typ=1 Len=6: ^@,C,^@,a,^@,t   

Нулеви аргументи

Предаването на null тъй като аргументът връща null :

SET NULL 'null';
SELECT 
    TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;

Резултат:

null

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Липсващ аргумент

Извикване на функцията с без подаване на char аргумент води до грешка:

SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете списък с поддържани езици в Oracle

  2. Защо изпълнението на тази заявка с EXECUTE IMMEDIATE води до неуспех?

  3. Потърсете стойност в стойността на колоната, която съхранява стойности, разделени със запетая

  4. Проблем с променливите за свързване на Oracle, които не използват правилно индекса

  5. Oracle:Импортиране на CSV файл