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

Hvordan SUBDATE() virker i MariaDB

I MariaDB, SUBDATE() er en indbygget dato- og tidsfunktion, der trækker et beløb fra en given 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 den.

SUBDATE() har også en genvejssyntaks, der giver dig mulighed for at angive de dage, der skal trækkes fra.

Syntaks

SUBDATE() funktion har to syntakser.

Syntaks 1:

SUBDATE(expr,days) 

Hvor expr er datoen og days er antallet af dage at trække fra.

Syntaks 2:

SUBDATE(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.).

Når du bruger denne syntaks, SUBDATE() er et synonym for DATE_SUB() .

Eksempel – Syntaks 1

Her er et eksempel på brug af den første syntaks:

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

Resultat:

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

Vi kan også inkludere tidsdelen, hvis det kræves:

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

Resultat:

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

Her er to alternative måder at gøre det samme på:

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

Resultat:

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

Eksempel – Syntaks 2

Her er et eksempel på brug af den anden syntaks:

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

Resultat:

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

Denne syntaks giver os mulighed for at trække andre enheder fra datoen (dvs. ikke kun dagene). Her trak jeg en time fra datoen, men jeg kunne lige så godt have trukket minutter, sekunder, måneder, dage, år osv. Eksempler senere.

Her er to alternative metoder til at opnå det samme resultat som ovenstående eksempel:

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

Resultat:

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

Negative intervaller

Angivelse af et negativt interval tilføjer det beløb til datoen.

Eksempel:

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

Resultat:

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

Andre enheder

Her er et eksempel, der trækker et interval på 1 fra de forskellige dato- og tidsenheder:

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; 

Resultat (ved hjælp af lodret output):

 ÅR:2020-05-01 10:00:00 MÅNED:2021-04-01 10:00:00 DAG:2021-04-30 10:00:00 TIME:2021-05-01 09:00:00 MINUTE:2021-05-01 09:59:00 SECOND:2021-05-01 09:59:59MICROSECOND:2021-05-01 09:59:59.999999

Sammensatte enheder

Her er et eksempel, der bruger sammensatte enheder:

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

Resultat:

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

Nulledatoer

Sender null for datoen returnerer null :

SELECT SUBDATE(null, INTERVAL 1 YEAR); 

Resultat:

+--------------------------------+| SUBDATE(null, INTERVAL 1 ÅR) |+--------------------------------+| NULL |+--------------------------------+

Manglende argument

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

SELECT SUBDATE(); 

Resultat:

FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ​​')' på linje 1

  1. MySQL – Forbindelsesfejl – [MySQL][ODBC 5.3(w)-driver]Værten 'IP' har ikke tilladelse til at oprette forbindelse til denne MySQL-server

  2. Meddeler postgres ændringer til java-applikationen

  3. Hvordan matcher jeg en hel dag med et dato-tidsfelt?

  4. En introduktion til MySQL-implementering ved hjælp af en Ansible-rolle