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

Función NEXT_DAY() en Oracle

En Oracle Database, el NEXT_DAY() La función devuelve la fecha de la primera instancia del día de la semana especificado que es posterior a la fecha especificada.

Sintaxis

La sintaxis es así:

NEXT_DAY(date, char)

Donde date es la fecha y char es el día de la semana especificado.

El char El argumento debe ser un día de la semana en el idioma de la fecha de la sesión actual, ya sea el nombre completo o la abreviatura. El número mínimo de letras requeridas es el número de letras en la versión abreviada. Cualquier carácter inmediatamente después de la abreviatura válida se ignora.

Ejemplo

He aquí un ejemplo:

SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;

Resultado:

   Next Friday 
______________ 
05-OCT-35     

Abreviaturas de días laborables

El ejemplo anterior utiliza el nombre completo del día de la semana. En el siguiente ejemplo, uso la abreviatura en su lugar:

SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;

Resultado:

   Next Friday 
______________ 
05-OCT-35     

De cualquier manera, el resultado es el mismo.

De hecho, siempre que la primera parte del argumento contenga una abreviatura válida del día de la semana, la función devolverá la fecha del siguiente día de la semana que coincida con esa abreviatura. Cualquier carácter inmediatamente después de la abreviatura válida se ignora. Por lo tanto, incluso si todo el argumento no es realmente un nombre de día de la semana válido, siempre que la primera parte sea una abreviatura de día de la semana válida, devolverá un resultado para ese día de la semana.

Ejemplos:

SELECT 
    NEXT_DAY('01-OCT-2035','Monkey') AS "Next Monkey",
    NEXT_DAY('01-OCT-2035','Thumbnail') AS "Next Thumbnail",
    NEXT_DAY('01-OCT-2035','Friar Tuck') AS "Next Friar Tuck"
FROM DUAL;

Resultado:

   Next Monkey    Next Thumbnail    Next Friar Tuck 
______________ _________________ __________________ 
08-OCT-35      04-OCT-35         05-OCT-35         

Configuración de idioma

Como se mencionó, el día de la semana o su abreviatura debe ser un día de la semana en el idioma de fecha de la sesión actual.

Esto es lo que sucede cuando cambio el idioma de mi sesión y luego intento ejecutar el mismo ejemplo nuevamente:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;

Resultado:

Session alterado.


Error que empieza en la línea: 1 del comando :
SELECT NEXT_DAY('01-OCT-2035','FRIDAY') AS "Next Friday"
FROM DUAL
Informe de error -
ORA-01846: día de la semana no válido

En este caso, mi idioma es el español, por lo que debemos proporcionar el día de la semana en español:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

SELECT NEXT_DAY('01-OCT-2035', 'viernes') AS "Next Friday"
FROM DUAL;

Resultado:

   Next Friday 
______________ 
05-OCT-35     

Argumentos nulos

Si alguno de los argumentos es null , el resultado es null :

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
SET NULL 'null';

SELECT
    NEXT_DAY(null, 'FRIDAY') AS "1",
    NEXT_DAY('01-OCT-2035', null) AS "2"
FROM DUAL;

Resultado:

      1       2 
_______ _______ 
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.

Argumento faltante

Llamando a NEXT_DAY() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:

SELECT NEXT_DAY()
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT NEXT_DAY()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action: