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

NLS_INITCAP() Funzione in Oracle

In Oracle, il NLS_INITCAP() La funzione restituisce il suo argomento con la prima lettera di ogni parola in maiuscolo e tutte le altre lettere in minuscolo.

Tuttavia, la capitalizzazione effettiva dipenderà dalle regole di confronto utilizzate. Ad esempio, potrebbe risultare in maiuscolo più della prima lettera.

È simile a INITCAP() funzione, tranne per il fatto che accetta un secondo argomento che consente di specificare le regole di confronto. La raccolta gestisce requisiti linguistici speciali per le conversioni di casi.

Sintassi

La sintassi è questa:

NLS_INITCAP(char [, 'nlsparam' ])

Dove entrambi char e 'nlsparam' può essere uno qualsiasi dei tipi di dati CHAR , VARCHAR2 , NCHAR o NVARCHAR2 .

Il 'nlsparam' argomento può avere la forma seguente:

'NLS_SORT = sort'

Dove sort è una raccolta denominata.

Se ometti questo argomento, viene utilizzato il confronto determinato della funzione.

Esempio

Ecco un semplice esempio da dimostrare:

SELECT NLS_INITCAP('the lake')
FROM DUAL;

Risultato:

   NLS_INITCAP('THELAKE') 
_________________________ 
The Lake                 

Specifica una confronto

Ecco un esempio che dimostra come la specifica di una confronto può alterare i risultati:

SELECT 
    NLS_INITCAP('het ijsselmeer') AS c1,
    NLS_INITCAP('het ijsselmeer', 'NLS_SORT = XDutch') AS c2
FROM DUAL;

Risultato:

               C1                C2 
_________________ _________________ 
Het Ijsselmeer    Het IJsselmeer    

Nota che nella seconda colonna, le prime due lettere di IJsselmeer sono in maiuscolo, mentre la prima colonna mette in maiuscolo solo la prima lettera.

In olandese, ij è considerata come una lettera, quindi entrambi i caratteri vengono scritti in maiuscolo quando compaiono all'inizio di una frase o di un nome proprio.

Nota che NLS_SORT sovrascrive le regole di confronto del primo argomento solo al momento dell'esecuzione. Pertanto, la seguente istruzione restituisce le regole di confronto del primo argomento, non del secondo:

SELECT
    COLLATION(NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDutch')) AS Collation
FROM DUAL;

Risultato:

        COLLATION 
_________________ 
USING_NLS_COMP   

L'argomento delle collazioni può essere piuttosto complesso. Consulta l'Appendice C nella Guida al supporto per la globalizzazione del database Oracle per le regole di determinazione delle regole di confronto e le regole di derivazione delle regole di confronto per questa funzione.

Cosa succede se passo tutte le lettere MAIUSCOLE?

Il passaggio di tutte le lettere maiuscole non cambia il risultato:

SELECT 
    NLS_INITCAP('HET IJSSELMEER', 'NLS_SORT = XDutch') AS Result
FROM DUAL;

Risultato:

           RESULT 
_________________ 
Het IJsselmeer    

Valori Nulli

Se un argomento è null , il risultato è null :

SET NULL 'null';

SELECT 
    NLS_INITCAP('het IJsselmeer', null) AS r1,
    NLS_INITCAP(null, 'NLS_SORT = XDutch') AS r2,
    NLS_INITCAP(null, null) AS r3
FROM DUAL;

Risultato:

     R1      R2      R3 
_______ _______ _______ 
null    null    null    

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Conteggio argomenti errato

Chiamando NLS_INITCAP() senza passare alcun argomento restituisce un errore:

SELECT NLS_INITCAP()
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT NLS_INITCAP()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

E il passaggio del numero errato di argomenti genera un errore:

SELECT NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDUTCH', 3)
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDUTCH', 3)
FROM DUAL
Error at Command Line : 1 Column : 59
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: