Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função NEXT_DAY() no Oracle


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: