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: