sql >> Databasteknik >  >> RDS >> MariaDB

Hur SUBDATE() fungerar i MariaDB

I MariaDB, SUBDATE() är en inbyggd datum- och tidsfunktion som subtraherar ett belopp från ett givet datum.

Det låter dig ändra ett datum genom att ange datumet, enheten som ska subtraheras och beloppet som ska subtraheras. Du kan skicka ett negativt belopp för att lägga till till datumet, istället för att subtrahera från det.

SUBDATE() har också en genvägssyntax som låter dig ange vilka dagar som ska subtraheras.

Syntax

SUBDATE() funktionen har två syntaxer.

Syntax 1:

SUBDATE(expr,days) 

Där expr är datumet och days är antalet dagar att subtrahera.

Syntax 2:

SUBDATE(date,INTERVAL expr unit) 

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

När du använder denna syntax, SUBDATE() är en synonym för DATE_SUB() .

Exempel – Syntax 1

Här är ett exempel på hur den första syntaxen används:

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

Resultat:

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

Vi kan även inkludera tidsdelen om det behövs:

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

Resultat:

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

Här är två alternativa sätt att göra samma sak:

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 |+---------------------+----------------------------+| 2021-04-30 10:00:00 | 2021-04-30 10:00:00 |+------------------------+---------------- -----+

Exempel – Syntax 2

Här är ett exempel på hur du använder den andra syntaxen:

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

Resultat:

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

Denna syntax tillåter oss att subtrahera andra enheter från datumet (dvs inte bara dagarna). Här har jag subtraherat en timme från datumet, men jag kunde lika gärna ha subtraherat minuter, sekunder, månader, dagar, år etc. Exempel senare.

Här är två alternativa metoder för att uppnå samma resultat som exemplet ovan:

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 |+---------------------+----------------------------+| 2021-05-31 09:00:00 | 2021-05-31 09:00:00 |+-------------------------+---------------- -----+

Negativa intervall

Ange ett negativt intervall lägger till det beloppet till datumet.

Exempel:

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

Resultat:

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

Övriga enheter

Här är ett exempel som subtraherar ett intervall på 1 från de olika datum- och tidsenheterna:

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 (med vertikal utdata):

 ÅR:2020-05-01 10:00:00 MÅNAD:2021-04-01 10:00:00 DAG:2021-04-30 10:00:00 TIMME:2021-05-01 09:00:00 MINUT:2021-05-01 09:59:00 SEKUND:2021-05-01 09:59:59MICROSECOND:2021-05-01 09:59:59.999999

Kompositenheter

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

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 |+---------------------+---------------------------+--- ------------------+| 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 |+---------------------------+---------------- -----+----------------------------+

Nulldatum

Skickar null för datumet returnerar null :

SELECT SUBDATE(null, INTERVAL 1 YEAR); 

Resultat:

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

Argument saknas

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

SELECT SUBDATE(); 

Resultat:

ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MariaDB-serverversion för rätt syntax att använda nära ')' på rad 1

  1. Så här åtgärdar du MySQL JDBC 08001-databasanslutningsfel

  2. Kul med (columnstore) komprimering på ett väldigt stort bord – del 2

  3. MariaDB VERSION() Förklarad

  4. Hur installerar man PDO-drivrutinen i php docker-bilden?