CodeGym/Java Course/All lectures for NL purposes/Datumfuncties, praktijkvoorbeelden

Datumfuncties, praktijkvoorbeelden

Beschikbaar

Op zoek naar gebeurtenissen in de afgelopen 30 dagen

Een andere veel voorkomende taak is het zoeken naar rijen die bij een bepaald datumbereik horen. In principe is dit niet moeilijk als de begin- en einddatum van de reeks vastligt: ​​SQL kan net zo goed datums als getallen vergelijken.

Vergelijkingsoperatoren kunnen worden toegepast op datums: < , > , <= , enz. Daarnaast is er een speciale TUSSEN-operator die ook met datums kan werken. Laten we bijvoorbeeld een query schrijven die alle taken uit de takentabel selecteert die in de zomer van 2022 moeten worden uitgevoerd. Het verzoek ziet er als volgt uit:

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

Het resultaat van deze query zal zijn:

ID kaart medewerker_id naam deadline
1 1 Los een bug op de frontend op 01-06-2022
2 2 Los een bug op de backend op 2022-06-15
3 5 Koop koffie 01-07-2022
4 5 Koop koffie 01-08-2022

Maar wat te schrijven in het verzoek als we bijvoorbeeld taken willen krijgen voor de afgelopen 30 dagen. Waarbij de laatste 30 dagen direct gekoppeld zijn aan de uitvoeringstijd van de query. Dat wil zeggen, als de query wordt uitgevoerd op 25 juli, moet u datums selecteren van 25 juni tot 24 juli. Hoe een datumbereik binden aan de huidige tijd?

Gebruik hiervoor de functie voor het toevoegen van datums:

DATE_ADD (date, INTERVAL expression units)

Ik denk dat het makkelijker zal zijn om het uit te leggen met een paar voorbeelden:

# Verzoek Resultaat
1 DATE_ADD('2022-06-04', INTERVAL 5 DAG) 09-06-2022
2 DATE_ADD('2022-06-04', INTERVAL 4 WEEK) 2022-07-02
3 DATE_ADD('2022-06-04', INTERVAL 2 MAAND) 2022-08-04
4
5 DATE_SUB('2022-06-04', INTERVAL 5 DAG) 2022-05-30
6 DATE_SUB('2022-06-04', INTERVAL 4 WEEK) 07-05-2022
7 DATE_SUB('2022-06-04', INTERVAL 2 MAAND) 2022-04-04

Van een bepaalde datum kan overigens ook een bepaald aantal dagen, weken, maanden en jaren worden afgetrokken.

En als we terugkeren naar ons verzoek - om gegevens van de afgelopen 30 dagen te krijgen, dan hebben we twee datums in dit bereik nodig:

  • CURDATE() - einde bereik
  • DATE_SUB( CURDATE() , INTERVAL 30 DAG) - begin van bereik

Het verzoek ziet er als volgt uit:

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

Het resultaat van deze vraag zal als volgt zijn (ik heb vandaag 4 juni 2022):

ID kaart medewerker_id naam deadline
1 1 Los een bug op de frontend op 01-06-2022

Hoe het verschil tussen twee datums te vinden

En nog een handige functie. Soms moet u het verschil tussen twee datums in dagen berekenen. Om dit te doen, heeft SQL een speciale functie - DATEDIFF ().

Het is heel gemakkelijk om met haar samen te werken:

DATEDIFF (date 1, date 2)

De tweede datum wordt gewoon afgetrokken van de eerste datum. Als datum2 na datum1 komt, is het resultaat negatief.

Overigens kunnen we onze vorige query herschrijven met de functie DATEDIFF(). We moeten alle taken uit de takentabel selecteren waarvan de deadline niet meer dan 30 dagen verschilt van de huidige datum. Dit is hoe dat verzoek eruit zou zien:

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

Het resultaat van deze vraag zal als volgt zijn (ik heb vandaag 4 juni 2022):

ID kaart medewerker_id naam deadline
1 1 Los een bug op de frontend op 01-06-2022
2 2 Los een bug op de backend op 2022-06-15
3 5 Koop koffie 01-07-2022

Deze keer vond SQL maar liefst drie rijen. Bedenk eens waarom de vorige keer er één regel was, en deze keer zijn het er drie?

Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen