CodeGym /Java kursus /All lectures for DA purposes /Datofunktioner, praktiske eksempler

Datofunktioner, praktiske eksempler

All lectures for DA purposes
Niveau , Lektie
Ledig

Leder efter begivenheder inden for de sidste 30 dage

En anden almindelig opgave er at søge efter rækker, der tilhører et bestemt datointerval. I princippet er dette ikke svært, hvis start- og slutdatoerne for intervallet er faste: SQL kan sammenligne datoer lige så godt som tal.

Sammenligningsoperatorer kan anvendes på datoer: < , > , <= osv. Derudover er der en speciel MELLEM operator, der også kan arbejde med datoer. Lad os for eksempel skrive en forespørgsel, der vil vælge alle opgaver fra opgavetabellen, der skal udføres i sommeren 2022. Anmodningen vil se således ud:

SELECT * FROM task  
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'

Resultatet af denne forespørgsel vil være:

id emploee_id navn deadline
1 1 Ret en fejl på frontend 2022-06-01
2 2 Ret en fejl på backend 2022-06-15
3 5 Køb kaffe 2022-07-01
4 5 Køb kaffe 2022-08-01

Men hvad skal vi skrive i forespørgslen, hvis vi ønsker at få opgaver, for eksempel for de sidste 30 dage. Hvor de sidste 30 dage er direkte knyttet til forespørgselsudførelsestiden. Det vil sige, at hvis forespørgslen udføres den 25. juli, så skal du vælge datoer fra 25. juni til 24. juli. Hvordan binder man et datointerval til det aktuelle tidspunkt?

For at gøre dette skal du bruge datotilføjelsesfunktionen:

DATE_ADD (date, INTERVAL expression units)

Jeg tror, ​​det vil være lettere at forklare med et par eksempler:

# Anmodning Resultat
1 DATE_ADD('2022-06-04', INTERVAL 5 DAGE) 2022-06-09
2 DATE_ADD('2022-06-04', INTERVAL 4 UGE) 2022-07-02
3 DATE_ADD('2022-06-04', INTERVAL 2 MÅNED) 2022-08-04
4
5 DATE_SUB('2022-06-04', INTERVAL 5 DAGE) 2022-05-30
6 DATE_SUB('2022-06-04', INTERVAL 4 UGE) 2022-05-07
7 DATE_SUB('2022-06-04', INTERVAL 2 MÅNED) 2022-04-04

I øvrigt kan et vist antal dage, uger, måneder og år også trækkes fra en bestemt dato.

Og hvis vi vender tilbage til vores anmodning - for at få data for de sidste 30 dage, så har vi brug for to datoer i dette interval:

  • CURDATE() - slutningen af ​​området
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) - start af interval

Anmodningen vil se således ud:

SELECT * FROM task WHERE task.deadline  
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE() 

Resultatet af denne forespørgsel vil være sådan her (jeg har i dag den 4. juni 2022):

id emploee_id navn deadline
1 1 Ret en fejl på frontend 2022-06-01

Sådan finder du forskellen mellem to datoer

Og en anden nyttig funktion. Nogle gange skal du muligvis beregne forskellen mellem to datoer i dage. For at gøre dette har SQL en speciel funktion - DATEDIFF ().

Det er meget nemt at arbejde med hende:

DATEDIFF (date 1, date 2)

Den anden dato trækkes simpelthen fra den første dato. Hvis dato2 kommer efter dato1, vil resultatet være negativt.

Forresten kan vi omskrive vores tidligere forespørgsel ved hjælp af DATEDIFF()-funktionen. Vi skal vælge alle opgaver fra opgavetabellen, hvis deadline ikke afviger fra den aktuelle dato med højst 30 dage. Sådan ser anmodningen ud:

SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30

Resultatet af denne forespørgsel vil være sådan her (jeg har i dag den 4. juni 2022):

id emploee_id navn deadline
1 1 Ret en fejl på frontend 2022-06-01
2 2 Ret en fejl på backend 2022-06-15
3 5 Køb kaffe 2022-07-01

Denne gang fandt SQL så mange som tre rækker. Tænk på, hvorfor der sidst var én linje, og denne gang er der tre?

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION