sql >> Database >  >> RDS >> MariaDB

Hoe SUBDATE() werkt in MariaDB

In MariaDB, SUBDATE() is een ingebouwde datum- en tijdfunctie die een bedrag aftrekt van een bepaalde datum.

Hiermee kunt u een datum wijzigen door de datum, de af te trekken eenheid en het af te trekken bedrag op te geven. U kunt een negatief bedrag doorgeven om toe te voegen naar de datum, in plaats van ervan af te trekken.

SUBDATE() heeft ook een syntaxis voor sneltoetsen waarmee u de dagen kunt specificeren die moeten worden afgetrokken.

Syntaxis

De SUBDATE() functie heeft twee syntaxis.

Syntaxis 1:

SUBDATE(expr,days)

Waar expr is de datum, en days is het aantal dagen dat moet worden afgetrokken.

Syntaxis 2:

SUBDATE(date,INTERVAL expr unit)

Waar date is de datum om te veranderen, expr is het af te trekken bedrag, en unit is de datum/tijd-eenheid die moet worden afgetrokken (bijv. seconde, minuut, enz.).

Bij gebruik van deze syntaxis, SUBDATE() is een synoniem voor DATE_SUB() .

Voorbeeld – Syntaxis 1

Hier is een voorbeeld van het gebruik van de eerste syntaxis:

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

Resultaat:

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

We kunnen indien nodig ook het tijdsgedeelte opnemen:

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

Resultaat:

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

Hier zijn twee alternatieve manieren om hetzelfde te doen:

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

Resultaat:

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

Voorbeeld – Syntaxis 2

Hier is een voorbeeld van het gebruik van de tweede syntaxis:

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

Resultaat:

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

Met deze syntaxis kunnen we andere eenheden van de datum aftrekken (d.w.z. niet alleen de dagen). Hier heb ik een uur van de datum afgetrokken, maar ik had net zo goed minuten, seconden, maanden, dagen, jaren, enz. kunnen aftrekken. Voorbeelden later.

Hier zijn twee alternatieve methoden om hetzelfde resultaat te bereiken als in het bovenstaande voorbeeld:

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

Resultaat:

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

Negatieve intervallen

Een negatief interval opgeven voegt toe dat bedrag tot de datum.

Voorbeeld:

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

Resultaat:

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

Andere eenheden

Hier is een voorbeeld dat een interval van 1 aftrekt van de verschillende datum- en tijdseenheden:

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;

Resultaat (met verticale uitvoer):

       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

Samengestelde eenheden

Hier is een voorbeeld dat samengestelde eenheden gebruikt:

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

Resultaat:

+---------------------+---------------------+---------------------+
| YEAR_MONTH          | HOUR_SECOND         | DAY_MINUTE          |
+---------------------+---------------------+---------------------+
| 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 |
+---------------------+---------------------+---------------------+

Null-datums

Doorgeven van null voor de datum retourneert null :

SELECT SUBDATE(null, INTERVAL 1 YEAR);

Resultaat:

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

Ontbrekend argument

SUBDATE() . aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:

SELECT SUBDATE();

Resultaat:

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. Hoe kan ik een String[]-parameter instellen op een native query?

  2. 3 manieren om de taakstappen van een SQL Server Agent-taak (T-SQL) te krijgen

  3. Oracle-triggerfout ORA-04091

  4. SQL-referentietabel:basisquery's maken en schrijven