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: