MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come SUBDATE() funziona in MariaDB

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