No banco de dados Oracle, o
NEXT_DAY()
A função retorna a data da primeira instância do dia da semana especificado que é posterior à data especificada. Sintaxe
A sintaxe fica assim:
NEXT_DAY(date, char)
Onde
date
é a data e char
é o dia da semana especificado. O
char
argumento deve ser um dia da semana no idioma de data da sessão atual, o nome completo ou a abreviação. O número mínimo de letras exigido é o número de letras na versão abreviada. Quaisquer caracteres imediatamente após a abreviação válida são ignorados. Exemplo
Aqui está um exemplo:
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultado:
Next Friday ______________ 05-OCT-35
Abreviações de dias úteis
O exemplo acima usa o nome completo do dia da semana. No exemplo a seguir, eu uso a abreviação:
SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;
Resultado:
Next Friday ______________ 05-OCT-35
De qualquer forma, o resultado é o mesmo.
Na verdade, desde que a primeira parte do argumento contenha uma abreviação válida de dia da semana, a função retornará a data do dia da semana seguinte que corresponde a essa abreviação. Quaisquer caracteres imediatamente após a abreviação válida são ignorados. Portanto, mesmo que o argumento inteiro não seja realmente um nome válido de dia da semana, desde que a primeira parte seja uma abreviação válida de dia da semana, ele retornará um resultado para esse dia da semana.
Exemplos:
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
Configurações de idioma
Conforme mencionado, o dia da semana ou sua abreviatura deve ser um dia da semana no idioma de data da sessão atual.
Veja o que acontece quando mudo o idioma da minha sessão e tento executar o mesmo exemplo novamente:
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
Nesse caso, meu idioma é o espanhol e, portanto, precisaríamos fornecer o dia da semana em espanhol:
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
Se um dos argumentos for
null
, o resultado é 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
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumento ausente
Chamando
NEXT_DAY()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro: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: