sql >> Database teknologi >  >> RDS >> Oracle

OVERSÆTT(… BRUGER) Funktion i Oracle

I Oracle er TRANSLATE(...USING) funktion konverterer sit argument til det tegnsæt, der er angivet for konverteringer mellem databasens tegnsæt og det nationale tegnsæt.

Denne funktion må ikke forveksles med TRANSLATE() funktion, som giver dig mulighed for at foretage flere enkelt-tegn, en-til-en udskiftninger i én operation.

TRANSLATE(...USING) funktion er understøttet i Oracle primært for ANSI-kompatibilitet. Oracle anbefaler, at vi bruger TO_CHAR() og TO_NCHAR() funktioner i stedet.

Syntaks

Syntaksen ser sådan ud:

TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Hvor char er det udtryk, der skal konverteres, og:

  • Angivelse af USING CHAR_CS argument konverterer char ind i databasens tegnsæt. Outputdatatypen er VARCHAR2 .
  • Angivelse af USING NCHAR_CS argument konverterer char ind i det nationale karaktersæt. Outputdatatypen er NVARCHAR2 .

Eksempel

Her er et grundlæggende eksempel:

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        

For at demonstrere forskellen er her, hvad der sker, når vi sender det til 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   

Nul-argumenter

Sender null da argumentet returnerer null :

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

Resultat:

null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Manglende argument

Kalder funktionen med uden at sende char argument resulterer i en fejl:

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. Tabellen er "skrivebeskyttet"

  2. Brug ikke sp_depends i SQL Server (den er forældet)

  3. GROUP BY og aggregerede sekventielle numeriske værdier

  4. Sådan installeres og sikres MariaDB 10 i CentOS 7