sql >> Databasteknik >  >> RDS >> Oracle

TRANSLATE(… ANVÄNDER) Funktion i Oracle

I Oracle, TRANSLATE(...USING) funktion konverterar sitt argument till den teckenuppsättning som anges för konverteringar mellan databasens teckenuppsättning och den nationella teckenuppsättningen.

Denna funktion ska inte förväxlas med den TRANSLATE() funktion, som låter dig göra flera en-till-en-ersättningar med ett tecken i en operation.

TRANSLATE(...USING) Funktionen stöds i Oracle främst för ANSI-kompatibilitet. Oracle rekommenderar att vi använder TO_CHAR() och TO_NCHAR() fungerar istället.

Syntax

Syntaxen ser ut så här:

TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Där char är uttrycket som ska konverteras och:

  • Ange koden USING CHAR_CS argument konverterar char i databasens teckenuppsättning. Utdatatypen är VARCHAR2 .
  • Ange koden USING NCHAR_CS argument konverterar char in i den nationella karaktärsuppsättningen. Utdatatypen är NVARCHAR2 .

Exempel

Här är ett grundläggande exempel:

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

Resultat:

   CHAR_CS    NCHAR_CS 
__________ ___________ 
Cat        Cat        

För att visa skillnaden, här är vad som händer när vi skickar den till DUMP() funktion:

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

Resultat:

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

Nollargument

Skickar null eftersom argumentet returnerar null :

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

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Argument saknas

Anropa funktionen utan att skicka char argument resulterar i ett fel:

SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;

Resultat:

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. Varför stöder inte MySQL millisekund / mikrosekund precision?

  2. Använd T-SQL, returnera n:te avgränsade element från en sträng

  3. My 11g Optimizer Stats Job Quit on Me – Fixed

  4. SQL Server:släpp tabell kaskad motsvarande?