MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie SUBDATE() in MariaDB funktioniert

In MariaDB SUBDATE() ist eine integrierte Datums- und Zeitfunktion, die einen Betrag von einem bestimmten Datum subtrahiert.

Sie können ein Datum ändern, indem Sie das Datum, die zu subtrahierende Einheit und den zu subtrahierenden Betrag angeben. Sie können einen negativen Betrag zum Hinzufügen übergeben auf das Datum, anstatt davon abzuziehen.

SUBDATE() hat auch eine Shortcut-Syntax, mit der Sie die zu subtrahierenden Tage angeben können.

Syntax

Das SUBDATE() Funktion hat zwei Syntaxen.

Syntax 1:

SUBDATE(expr,days) 

Wobei expr ist das Datum und days ist die Anzahl der zu subtrahierenden Tage.

Syntax 2:

SUBDATE(date,INTERVAL expr unit) 

Wobei date ist das zu ändernde Datum, expr ist der zu subtrahierende Betrag und unit ist die zu subtrahierende Datums-/Zeiteinheit (z. B. Sekunde, Minute usw.).

Bei Verwendung dieser Syntax SUBDATE() ist ein Synonym für DATE_SUB() .

Beispiel – Syntax 1

Hier ist ein Beispiel für die Verwendung der ersten Syntax:

SELECT SUBDATE('2021-05-01', 1); 

Ergebnis:

+---------------------+| SUBDATE('2021-05-01', 1) |+---------------------+| 2021-04-30 |+---------------------+

Bei Bedarf können wir auch den Zeitanteil einbeziehen:

SELECT SUBDATE('2021-05-01 10:00:00', 1); 

Ergebnis:

+-----------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+------------------------------- ----+| 2021-04-30 10:00:00 |+-----------------------------------+ 

Hier sind zwei alternative Möglichkeiten, dasselbe zu tun:

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"; 

Ergebnis:

+---------------------+---------------------+| Ergebnis 1 | Ergebnis 2 |+---------------------+---------------------+| 2021-04-30 10:00:00 | 2021-04-30 10:00:00 |+---------------------+---------------- -----+

Beispiel – Syntax 2

Hier ist ein Beispiel für die Verwendung der zweiten Syntax:

SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR); 

Ergebnis:

+---------------------------------------------- ---+| SUBDATE('2021-05-31 10:00:00', INTERVALL 1 STUNDE) |+------------------------------------- --------------------+| 2021-05-31 09:00:00 |+--------------------------------------------------- -----------+

Diese Syntax ermöglicht es uns, andere Einheiten vom Datum abzuziehen (also nicht nur die Tage). Hier habe ich eine Stunde vom Datum abgezogen, aber ich hätte genauso gut Minuten, Sekunden, Monate, Tage, Jahre usw. abziehen können. Beispiele später.

Hier sind zwei alternative Methoden, um das gleiche Ergebnis wie im obigen Beispiel zu erzielen:

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"; 

Ergebnis:

+---------------------+---------------------+| Ergebnis 1 | Ergebnis 2 |+---------------------+---------------------+| 2021-05-31 09:00:00 | 2021-05-31 09:00:00 |+---------------------+---------------- -----+

Negative Intervalle

Die Bereitstellung eines negativen Intervalls addiert das entspricht dem Datum.

Beispiel:

SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR); 

Ergebnis:

+---------------------------------------------- ----+| SUBDATE('2021-05-31 10:00:00', INTERVALL -1 STUNDE) |+----------------------- ----------------------+| 2021-05-31 11:00:00 |+------------------------------------- -------------+

Andere Einheiten

Hier ist ein Beispiel, das ein Intervall von 1 von den verschiedenen Datums- und Zeiteinheiten subtrahiert:

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; 

Ergebnis (bei vertikaler Ausgabe):

 JAHR:2020-05-01 10:00:00 MONAT:2021-04-01 10:00:00 TAG:2021-04-30 10:00:00 STUNDE:2021-05-01 09:00:00 MINUTE:2021-05-01 09:59:00 ZWEITE:2021-05-01 09:59:59 MIKROSEKUNDE:2021-05-01 09:59:59.999999

Zusammengesetzte Einheiten

Hier ist ein Beispiel, das zusammengesetzte Einheiten verwendet:

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"; 

Ergebnis:

+---------------------+---------------------+-- -------------------+| JAHR_MONAT | HOUR_SECOND | DAY_MINUTE |+---------------------+---------------------+--- ------------------+| 01.03.2020 10:00:00 | 01.05.2021 08:34:25 | 2021-05-01 08:30:00 |+---------------------+---------------- -----+---------------------+

Nulldaten

Übergabe von null für das Datum gibt null zurück :

SELECT SUBDATE(null, INTERVAL 1 YEAR); 

Ergebnis:

+-------------------------------+| SUBDATE(Null, INTERVALL 1 JAHR) |+---------------------------------------------+| NULL |+-------------------------------+

Fehlendes Argument

Aufruf von SUBDATE() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT SUBDATE(); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von ')' in Zeile 1 zu verwenden