sql >> Databáze >  >> RDS >> Oracle

Funkce NLS_INITCAP() v Oracle

V Oracle je to NLS_INITCAP() funkce vrací svůj argument s prvním písmenem každého slova velkým a všemi ostatními písmeny malými.

Skutečná kapitalizace však bude záviset na použitém řazení. Mohlo by to například vést k tomu, že větší než první písmeno bude velké.

Je to podobné jako INITCAP() funkce, kromě toho, že přijímá druhý argument, který vám umožňuje určit řazení. Porovnání řeší speciální lingvistické požadavky na převody velkých a malých písmen.

Syntaxe

Syntaxe vypadá takto:

NLS_INITCAP(char [, 'nlsparam' ])

Kde oba char a 'nlsparam' může být libovolný z datových typů CHAR , VARCHAR2 , NCHAR nebo NVARCHAR2 .

'nlsparam' argument může mít následující tvar:

'NLS_SORT = sort'

Kde sort je pojmenovaná kolace.

Pokud tento argument vynecháte, použije se určené řazení funkce.

Příklad

Zde je jednoduchý příklad k demonstraci:

SELECT NLS_INITCAP('the lake')
FROM DUAL;

Výsledek:

   NLS_INITCAP('THELAKE') 
_________________________ 
The Lake                 

Zadejte řazení

Zde je příklad, který ukazuje, jak může zadání řazení změnit výsledky:

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

Výsledek:

               C1                C2 
_________________ _________________ 
Het Ijsselmeer    Het IJsselmeer    

Všimněte si, že ve druhém sloupci jsou první dvě písmena IJsselmeer jsou velká, zatímco v prvním sloupci je pouze první písmeno.

V holandštině ij je považováno za jedno písmeno, a proto jsou oba znaky velké, když se vyskytují na začátku věty nebo vlastního jména.

Všimněte si, že NLS_SORT přepíše řazení prvního argumentu pouze v době provádění. Proto následující příkaz vrátí řazení prvního argumentu, nikoli druhého:

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

Výsledek:

        COLLATION 
_________________ 
USING_NLS_COMP   

Předmět porovnávání může být poměrně složitý. Pravidla určování řazení a pravidla odvozování řazení pro tuto funkci naleznete v příloze C příručky Oracle Database Globalization Support Guide.

Co když předám všechna VELKÁ písmena?

Předání všech velkých písmen nezmění výsledek:

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

Výsledek:

           RESULT 
_________________ 
Het IJsselmeer    

Nulové hodnoty

Pokud je některý argument null , výsledkem je 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;

Výsledek:

     R1      R2      R3 
_______ _______ _______ 
null    null    null    

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Nesprávný počet argumentů

Volání NLS_INITCAP() bez předání jakýchkoli argumentů vrátí chybu:

SELECT NLS_INITCAP()
FROM DUAL;

Výsledek:

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:

A předání nesprávného počtu argumentů má za následek chybu:

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

Výsledek:

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:

  1. Přehled VACUUM Processing v PostgreSQL

  2. ADDDATE() vs DATE_ADD() v MySQL:Jaký je rozdíl?

  3. Co dělat (nebo nedělat) s hlavními statistikami čekání

  4. Rady pomocí kontingenční tabulky v Oracle