sql >> Databasteknik >  >> RDS >> MariaDB

Hur DATE_ADD() fungerar i MariaDB

I MariaDB, DATE_ADD() är en inbyggd datum- och tidsfunktion som utför datumaritmetik.

Det låter dig ändra ett datum genom att ange datumet, enheten som ska läggas till och beloppet som ska läggas till. Du kan skicka ett negativt belopp om du behöver dra av datumet med ett visst intervall.

Syntax

Syntaxen ser ut så här:

DATE_ADD(date,INTERVAL expr unit)

Där date är datumet att ändra, expr är beloppet som ska läggas till och unit är den datum/tidsenhet som ska läggas till (t.ex. sekund, minut, etc).

Exempel

Här är ett grundläggande exempel:

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

Resultat:

+--------------------------------------------------+
| DATE_ADD('2021-05-31 10:00:00', INTERVAL 1 HOUR) |
+--------------------------------------------------+
| 2021-05-31 11:00:00                              |
+--------------------------------------------------+

Det är som att göra följande:

SELECT '2021-05-31 10:00:00' + INTERVAL 1 HOUR;

Resultat:

+-----------------------------------------+
| '2021-05-31 10:00:00' + INTERVAL 1 HOUR |
+-----------------------------------------+
| 2021-05-31 11:00:00                     |
+-----------------------------------------+

Negativa intervall

Genom att ange ett negativt intervall subtraherar det beloppet från datumet.

Exempel:

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

Resultat:

+---------------------------------------------------+
| DATE_ADD('2021-05-31 10:00:00', INTERVAL -1 HOUR) |
+---------------------------------------------------+
| 2021-05-31 09:00:00                               |
+---------------------------------------------------+

Övriga enheter

Här är ett exempel som lägger till ett intervall på 1 till de olika datum- och tidsenheterna:

SELECT 
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND,
    DATE_ADD('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;

Resultat (med vertikal utdata):

       YEAR: 2022-05-01 10:00:00
      MONTH: 2021-06-01 10:00:00
        DAY: 2021-05-02 10:00:00
       HOUR: 2021-05-01 11:00:00
     MINUTE: 2021-05-01 10:01:00
     SECOND: 2021-05-01 10:00:01
MICROSECOND: 2021-05-01 10:00:00.000001

Kompositenheter

Här är ett exempel som använder sammansatta enheter:

SELECT 
    DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
    DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
    DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";

Resultat:

+---------------------+---------------------+---------------------+
| YEAR_MONTH          | HOUR_SECOND         | DAY_MINUTE          |
+---------------------+---------------------+---------------------+
| 2022-07-01 10:00:00 | 2021-05-01 11:25:35 | 2021-05-01 11:30:00 |
+---------------------+---------------------+---------------------+

Nulldatum

Skickar null för datumet returnerar null :

SELECT DATE_ADD(null, INTERVAL 1 YEAR);

Resultat:

+---------------------------------+
| DATE_ADD(null, INTERVAL 1 YEAR) |
+---------------------------------+
| NULL                            |
+---------------------------------+

Argument saknas

Ringer DATE_ADD() med fel antal argument, eller utan att skicka några argument resulterar i ett fel:

SELECT DATE_ADD();

Resultat:

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

  1. Hur ändrar jag fält i den nya PostgreSQL JSON-datatypen?

  2. Bästa tillvägagångssätt för grupperade löpande summor

  3. Beräkna öppettider mellan två datum

  4. Tabell-värderade funktioner i ORACLE 11g ? (parameteriserade vyer)