Oracle
 sql >> Baza danych >  >> RDS >> Oracle

NEXT_DAY() Funkcja w Oracle

W bazie danych Oracle NEXT_DAY() funkcja zwraca datę pierwszego wystąpienia określonego dnia tygodnia, która jest późniejsza niż określona data.

Składnia

Składnia wygląda tak:

NEXT_DAY(date, char)

Gdzie date to data i char to określony dzień tygodnia.

char argument musi być dniem tygodnia w języku daty bieżącej sesji, pełną nazwą lub skrótem. Minimalna wymagana liczba liter to liczba liter w wersji skróconej. Wszelkie znaki występujące bezpośrednio po prawidłowym skrócie są ignorowane.

Przykład

Oto przykład:

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

Wynik:

   Next Friday 
______________ 
05-OCT-35     

Skróty w dni powszednie

Powyższy przykład używa pełnej nazwy dnia tygodnia. W poniższym przykładzie używam skrótu:

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

Wynik:

   Next Friday 
______________ 
05-OCT-35     

Tak czy inaczej, wynik jest taki sam.

W rzeczywistości, dopóki pierwsza część argumentu zawiera poprawny skrót dnia tygodnia, funkcja zwróci datę następnego dnia tygodnia, który pasuje do tego skrótu. Wszelkie znaki występujące bezpośrednio po prawidłowym skrócie są ignorowane. Tak więc, nawet jeśli cały argument nie jest w rzeczywistości prawidłową nazwą dnia tygodnia, o ile pierwsza część jest prawidłowym skrótem dnia tygodnia, zwróci wynik dla tego dnia tygodnia.

Przykłady:

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;

Wynik:

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

Ustawienia języka

Jak wspomniano, dzień tygodnia lub jego skrót musi być dniem tygodnia w języku daty bieżącej sesji.

Oto, co się stanie, gdy zmienię język sesji, a następnie spróbuję ponownie uruchomić ten sam przykład:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

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

Wynik:

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

W tym przypadku moim językiem jest hiszpański, więc musielibyśmy podać dzień powszedni po hiszpańsku:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

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

Wynik:

   Next Friday 
______________ 
05-OCT-35     

Argumenty zerowe

Jeśli któryś z argumentów jest null , wynik to 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;

Wynik:

      1       2 
_______ _______ 
null    null   

Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null występuje w wyniku polecenia SQL SELECT oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.

Brakujący argument

Wywołanie NEXT_DAY() z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:

SELECT NEXT_DAY()
FROM DUAL;

Wynik:

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL:Tworzenie pakietu DML online

  2. 2 sposoby zwracania wierszy, które nie zawierają wartości liczbowych w Oracle

  3. Dlaczego PL/SQL nie respektuje uprawnień przyznanych przez role?

  4. Funkcja NLS_COLLATION_NAME() w Oracle

  5. Liczba wierszy Oracle w tabeli według liczby (*) vs NUM_ROWS z DBA_TABLES