В Oracle, NLS_INITCAP()
функцията връща своя аргумент с първата буква на всяка дума с главни букви и всички останали букви с малки.
Въпреки това, действителната капитализация ще зависи от използваното съпоставяне. Например, това може да доведе до главна буква от повече от първата буква.
Той е подобен на INITCAP()
функция, с изключение на това, че приема втори аргумент, който ви позволява да посочите съпоставянето. Съпоставянето обработва специални езикови изисквания за преобразуване на главни и главни букви.
Синтаксис
Синтаксисът е така:
NLS_INITCAP(char [, 'nlsparam' ])
Където и двете char
и 'nlsparam'
може да бъде всеки от типовете данни CHAR
, VARCHAR2
, NCHAR
или NVARCHAR2
.
'nlsparam'
аргументът може да има следната форма:
'NLS_SORT = sort'
Където sort
е съпоставяне с име.
Ако пропуснете този аргумент, се използва определеното съпоставяне на функцията.
Пример
Ето един прост пример за демонстрация:
SELECT NLS_INITCAP('the lake')
FROM DUAL;
Резултат:
NLS_INITCAP('THELAKE') _________________________ The Lake
Посочете колекция
Ето пример, който демонстрира как определянето на съпоставяне може да промени резултатите:
SELECT
NLS_INITCAP('het ijsselmeer') AS c1,
NLS_INITCAP('het ijsselmeer', 'NLS_SORT = XDutch') AS c2
FROM DUAL;
Резултат:
C1 C2 _________________ _________________ Het Ijsselmeer Het IJsselmeer
Забележете, че във втората колона, първите две букви на IJsselmeer са главни, докато първата колона пише само първата буква.
На холандски ij се счита за една буква и така и двата знака се изписват с главни букви, когато се появят в началото на изречение или собствено име.
Имайте предвид, че NLS_SORT
отменя съпоставянето на първия аргумент само в момента на изпълнение. Следователно следният оператор връща съпоставянето на първия аргумент, а не на втория:
SELECT
COLLATION(NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDutch')) AS Collation
FROM DUAL;
Резултат:
COLLATION _________________ USING_NLS_COMP
Темата за съпоставянето може да бъде доста сложна. Вижте Приложение C в Ръководството за поддръжка на глобализация на базата данни на Oracle за правилата за определяне на съпоставяне и правилата за извличане на съпоставяне за тази функция.
Ами ако предам всички ГЛАВНИ букви?
Предаването на всички главни букви не променя резултата:
SELECT
NLS_INITCAP('HET IJSSELMEER', 'NLS_SORT = XDutch') AS Result
FROM DUAL;
Резултат:
RESULT _________________ Het IJsselmeer
Нулеви стойности
Ако някой аргумент е null
, резултатът е 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;
Резултат:
R1 R2 R3 _______ _______ _______ null null null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Неправилен брой аргументи
Извикване на NLS_INITCAP()
без подаване на аргументи връща грешка:
SELECT NLS_INITCAP()
FROM DUAL;
Резултат:
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:
И предаването на грешен брой аргументи води до грешка:
SELECT NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDUTCH', 3)
FROM DUAL;
Резултат:
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: