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 konvertererchar
ind i databasens tegnsæt. Outputdatatypen erVARCHAR2
. - Angivelse af
USING
NCHAR_CS
argument konvertererchar
ind i det nationale karaktersæt. Outputdatatypen erNVARCHAR2
.
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: