Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction NLS_INITCAP() dans Oracle

Dans Oracle, le NLS_INITCAP() La fonction renvoie son argument avec la première lettre de chaque mot en majuscule et toutes les autres lettres en minuscule.

Cependant, la capitalisation réelle dépendra de la collation utilisée. Par exemple, il pourrait en résulter que plus que la première lettre soit en majuscule.

C'est similaire à INITCAP() fonction, sauf qu'elle accepte un deuxième argument qui vous permet de spécifier le classement. Le classement gère les exigences linguistiques spéciales pour les conversions de casse.

Syntaxe

La syntaxe ressemble à ceci :

NLS_INITCAP(char [, 'nlsparam' ])

Où les deux char et 'nlsparam' peut être l'un des types de données CHAR , VARCHAR2 , NCHAR , ou NVARCHAR2 .

Le 'nlsparam' l'argument peut avoir la forme suivante :

'NLS_SORT = sort'

sort est une collation nommée.

Si vous omettez cet argument, le classement déterminé de la fonction est utilisé.

Exemple

Voici un exemple simple pour illustrer :

SELECT NLS_INITCAP('the lake')
FROM DUAL;

Résultat :

   NLS_INITCAP('THELAKE') 
_________________________ 
The Lake                 

Spécifier un classement

Voici un exemple qui montre comment la spécification d'un classement peut modifier les résultats :

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

Résultat :

               C1                C2 
_________________ _________________ 
Het Ijsselmeer    Het IJsselmeer    

Notez que dans la deuxième colonne, les deux premières lettres de IJsselmeer sont en majuscules, alors que la première colonne ne met en majuscule que la première lettre.

En néerlandais, ij est considéré comme une seule lettre, et donc les deux caractères sont en majuscules lorsqu'ils apparaissent au début d'une phrase ou d'un nom propre.

Notez que NLS_SORT remplace le classement du premier argument uniquement au moment de l'exécution. Par conséquent, l'instruction suivante renvoie le classement du premier argument, pas le second :

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

Résultat :

        COLLATION 
_________________ 
USING_NLS_COMP   

Le sujet des collations peut être assez complexe. Reportez-vous à l'annexe C du manuel Oracle Database Globalization Support Guide pour connaître les règles de détermination du classement et les règles de dérivation du classement pour cette fonction.

Et si je réussis toutes les lettres MAJUSCULES ?

Passer toutes les lettres majuscules ne change pas le résultat :

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

Résultat :

           RESULT 
_________________ 
Het IJsselmeer    

Valeurs nulles

Si un argument est null , le résultat est 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;

Résultat :

     R1      R2      R3 
_______ _______ _______ 
null    null    null    

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Nombre d'arguments incorrects

Appel de NLS_INITCAP() sans passer d'argument renvoie une erreur :

SELECT NLS_INITCAP()
FROM DUAL;

Résultat :

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:

Et passer le mauvais nombre d'arguments entraîne une erreur :

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

Résultat :

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: