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