sql >> Base de Datos >  >> RDS >> Oracle

Función NLS_INITCAP() en Oracle

En Oracle, el NLS_INITCAP() La función devuelve su argumento con la primera letra de cada palabra en mayúsculas y todas las demás letras en minúsculas.

Sin embargo, la capitalización real dependerá de la intercalación que se utilice. Por ejemplo, podría resultar en que más de la primera letra esté en mayúscula.

Es similar al INITCAP() función, excepto que acepta un segundo argumento que le permite especificar la intercalación. La intercalación maneja requisitos lingüísticos especiales para conversiones de casos.

Sintaxis

La sintaxis es así:

NLS_INITCAP(char [, 'nlsparam' ])

Donde ambos char y 'nlsparam' puede ser cualquiera de los tipos de datos CHAR , VARCHAR2 , NCHAR o NVARCHAR2 .

El 'nlsparam' argumento puede tener la siguiente forma:

'NLS_SORT = sort'

Donde sort es una colación con nombre.

Si omite este argumento, se utiliza la colación determinada de la función.

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

SELECT NLS_INITCAP('the lake')
FROM DUAL;

Resultado:

   NLS_INITCAP('THELAKE') 
_________________________ 
The Lake                 

Especifique una colación

Aquí hay un ejemplo que demuestra cómo especificar una intercalación puede alterar los resultados:

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

Resultado:

               C1                C2 
_________________ _________________ 
Het Ijsselmeer    Het IJsselmeer    

Observe que en la segunda columna, las dos primeras letras de IJsselmeer están en mayúscula, mientras que la primera columna solo escribe en mayúscula la primera letra.

En holandés, ij se considera como una sola letra, por lo que ambos caracteres se escriben en mayúscula cuando aparecen al principio de una oración o de un nombre propio.

Tenga en cuenta que NLS_SORT anula la intercalación del primer argumento solo en el momento de la ejecución. Por lo tanto, la siguiente instrucción devuelve la colación del primer argumento, no del segundo:

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

Resultado:

        COLLATION 
_________________ 
USING_NLS_COMP   

El tema de las colaciones puede ser bastante complejo. Consulte el Apéndice C en la Guía de compatibilidad con la globalización de la base de datos de Oracle para conocer las reglas de determinación de intercalación y las reglas de derivación de intercalación para esta función.

¿Qué pasa si paso todas las letras MAYÚSCULAS?

Pasar todas las letras mayúsculas no cambia el resultado:

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

Resultado:

           RESULT 
_________________ 
Het IJsselmeer    

Valores nulos

Si algún argumento es null , el resultado es 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;

Resultado:

     R1      R2      R3 
_______ _______ _______ 
null    null    null    

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Recuento de argumentos incorrecto

Llamando a NLS_INITCAP() sin pasar ningún argumento devuelve un error:

SELECT NLS_INITCAP()
FROM DUAL;

Resultado:

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:

Y pasar el número incorrecto de argumentos da como resultado un error:

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

Resultado:

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: