In MariaDB, SUBDATE()
è una funzione di data e ora incorporata che sottrae un importo da una data data.
Consente di modificare una data specificando la data, l'unità da sottrarre e l'importo da sottrarre. Puoi passare un importo negativo per aggiungere alla data, invece di sottrarre da essa.
SUBDATE()
ha anche una sintassi di scorciatoia che ti consente di specificare i giorni da sottrarre.
Sintassi
Il SUBDATE()
la funzione ha due sintassi.
Sintassi 1:
SUBDATE(expr,days)
Dove expr
è la data e days
è il numero di giorni da sottrarre.
Sintassi 2:
SUBDATE(date,INTERVAL expr unit)
Dove date
è la data da modificare, expr
è l'importo da sottrarre e unit
è l'unità di data/ora da sottrarre (es. secondi, minuti, ecc.).
Quando si utilizza questa sintassi, SUBDATE()
è sinonimo di DATE_SUB()
.
Esempio – Sintassi 1
Ecco un esempio di utilizzo della prima sintassi:
SELECT SUBDATE('2021-05-01', 1);
Risultato:
+--------------------------+ | SUBDATE('2021-05-01', 1) | +--------------------------+ | 2021-04-30 | +--------------------------+
Possiamo anche includere la parte del tempo, se necessario:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Risultato:
+-----------------------------------+ | SUBDATE('2021-05-01 10:00:00', 1) | +-----------------------------------+ | 2021-04-30 10:00:00 | +-----------------------------------+
Ecco due modi alternativi per fare la stessa cosa:
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";
Risultato:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-04-30 10:00:00 | 2021-04-30 10:00:00 | +---------------------+---------------------+
Esempio – Sintassi 2
Ecco un esempio di utilizzo della seconda sintassi:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Risultato:
+-------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) | +-------------------------------------------------+ | 2021-05-31 09:00:00 | +-------------------------------------------------+
Questa sintassi ci consente di sottrarre altre unità dalla data (cioè non solo i giorni). Qui ho sottratto un'ora dalla data, ma avrei potuto facilmente sottrarre minuti, secondi, mesi, giorni, anni, ecc. Esempi dopo.
Ecco due metodi alternativi per ottenere lo stesso risultato dell'esempio precedente:
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";
Risultato:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-05-31 09:00:00 | 2021-05-31 09:00:00 | +---------------------+---------------------+
Intervalli negativi
Fornire un intervallo negativo aggiunge tale importo alla data.
Esempio:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Risultato:
+--------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) | +--------------------------------------------------+ | 2021-05-31 11:00:00 | +--------------------------------------------------+
Altre unità
Ecco un esempio che sottrae un intervallo di 1 dalle varie unità di data e ora:
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;
Risultato (usando l'output verticale):
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
Unità composite
Ecco un esempio che utilizza unità composite:
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";
Risultato:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 | +---------------------+---------------------+---------------------+
Date nulle
Passaggio null
per la data ritorna null
:
SELECT SUBDATE(null, INTERVAL 1 YEAR);
Risultato:
+--------------------------------+ | SUBDATE(null, INTERVAL 1 YEAR) | +--------------------------------+ | NULL | +--------------------------------+
Argomento mancante
Chiamando SUBDATE()
con il numero errato di argomenti o senza passare alcun argomento genera un errore:
SELECT SUBDATE();
Risultato:
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