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