W MariaDB, SUBDATE()
to wbudowana funkcja daty i czasu, która odejmuje kwotę od podanej daty.
Pozwala zmienić datę, określając datę, jednostkę do odjęcia i kwotę do odjęcia. Możesz przekazać kwotę ujemną, aby dodać do daty, zamiast odejmowania od niej.
SUBDATE()
ma również składnię skrótów, która pozwala określić dni do odjęcia.
Składnia
SUBDATE()
funkcja ma dwie składnie.
Składnia 1:
SUBDATE(expr,days)
Gdzie expr
to data i days
to liczba dni do odjęcia.
Składnia 2:
SUBDATE(date,INTERVAL expr unit)
Gdzie date
to data do zmiany, expr
to kwota do odjęcia, a unit
jest jednostką daty/czasu do odjęcia (np. sekunda, minuta itp.).
Używając tej składni, SUBDATE()
jest synonimem DATE_SUB()
.
Przykład — składnia 1
Oto przykład użycia pierwszej składni:
SELECT SUBDATE('2021-05-01', 1);
Wynik:
+--------------------------+ | SUBDATE('2021-05-01', 1) | +--------------------------+ | 2021-04-30 | +--------------------------+
W razie potrzeby możemy również uwzględnić część czasu:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Wynik:
+-----------------------------------+ | SUBDATE('2021-05-01 10:00:00', 1) | +-----------------------------------+ | 2021-04-30 10:00:00 | +-----------------------------------+
Oto dwa alternatywne sposoby zrobienia tego samego:
SELECT
DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1",
'2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2";
Wynik:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-04-30 10:00:00 | 2021-04-30 10:00:00 | +---------------------+---------------------+
Przykład — składnia 2
Oto przykład użycia drugiej składni:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Wynik:
+-------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) | +-------------------------------------------------+ | 2021-05-31 09:00:00 | +-------------------------------------------------+
Ta składnia pozwala nam odjąć inne jednostki od daty (tj. Nie tylko dni). Tutaj odjąłem godzinę od daty, ale równie dobrze mogłem odjąć minuty, sekundy, miesiące, dni, lata itd. Przykłady później.
Oto dwie alternatywne metody osiągnięcia tego samego wyniku, co w powyższym przykładzie:
SELECT
DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1",
'2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2";
Wynik:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-05-31 09:00:00 | 2021-05-31 09:00:00 | +---------------------+---------------------+
Przedziały ujemne
Zapewnienie ujemnego przedziału dodaje tę kwotę do dnia dzisiejszego.
Przykład:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Wynik:
+--------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) | +--------------------------------------------------+ | 2021-05-31 11:00:00 | +--------------------------------------------------+
Inne jednostki
Oto przykład, który odejmuje interwał równy 1 od różnych jednostek daty i czasu:
SELECT
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Wynik (przy użyciu wyjścia pionowego):
YEAR: 2020-05-01 10:00:00 MONTH: 2021-04-01 10:00:00 DAY: 2021-04-30 10:00:00 HOUR: 2021-05-01 09:00:00 MINUTE: 2021-05-01 09:59:00 SECOND: 2021-05-01 09:59:59 MICROSECOND: 2021-05-01 09:59:59.999999
Jednostki złożone
Oto przykład wykorzystujący jednostki złożone:
SELECT
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Wynik:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 | +---------------------+---------------------+---------------------+
Daty zerowe
Przekazywanie null
dla daty zwraca null
:
SELECT SUBDATE(null, INTERVAL 1 YEAR);
Wynik:
+--------------------------------+ | SUBDATE(null, INTERVAL 1 YEAR) | +--------------------------------+ | NULL | +--------------------------------+
Brakujący argument
Wywołanie SUBDATE()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT SUBDATE();
Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1