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

Sådan fungerer DATE_SUB() i MariaDB

I MariaDB, DATE_SUB() er en indbygget dato- og tidsfunktion, der giver dig mulighed for at trække et beløb fra en dato.

Det giver dig mulighed for at ændre en dato ved at angive datoen, den enhed, der skal trækkes fra, og det beløb, der skal trækkes fra. Du kan sende et negativt beløb for at tilføje til datoen i stedet for at trække fra det.

Syntaks

Syntaksen ser sådan ud:

DATE_SUB(date,INTERVAL expr unit)

Hvor date er datoen for ændring, expr er det beløb, der skal trækkes fra, og unit er den dato/tidsenhed, der skal trækkes fra (f.eks. sekund, minut osv.).

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

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

Det er ligesom at gøre følgende:

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

Resultat:

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

Negative intervaller

Angivelse af et negativt interval tilføjer dette beløb fra datoen.

Eksempel:

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

Resultat:

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

Andre enheder

Her er et eksempel, der tilføjer et interval på 1 til de forskellige dato- og tidsenheder:

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

Resultat (ved hjælp af lodret output):

       YEAR: 2020-05-10 10:00:00
      MONTH: 2021-04-10 10:00:00
        DAY: 2021-05-09 10:00:00
       HOUR: 2021-05-10 09:00:00
     MINUTE: 2021-05-10 09:59:00
     SECOND: 2021-05-10 09:59:59
MICROSECOND: 2021-05-10 09:59:59.999999

Sammensatte enheder

Her er et eksempel, der bruger sammensatte enheder:

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

Resultat:

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

Nulledatoer

Sender null for datoen returnerer null :

SELECT DATE_SUB(null, INTERVAL 1 YEAR);

Resultat:

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

Manglende argument

Kalder DATE_SUB() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT DATE_SUB();

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. Hvad er Multi Dimension OLAP CUBE og giv et eksempel på en terning med mere end 3 dimensioner

  2. Django bulk_create med ignorer rækker, der forårsager IntegrityError?

  3. enkelt fast tabel med flere kolonner vs fleksible abstrakte tabeller

  4. Ændring af præcision af numerisk kolonne i Oracle