JavaRush /Kurslar /All lectures for TK purposes /Senetler bilen işlemek, praktik mysallar

Senetler bilen işlemek, praktik mysallar

All lectures for TK purposes
Dereje , Sapak
Elýeterli

Soňky 30 günüň hadysalaryny gözleýäris

Başga bir köplenç ýüze çykýan mesele - belli bir seneler aralygyndaky setirleri gözlemek. Başlangyç we gutaryş seneleri kesgitli bolsa, bu ýerde kyn iş ýok: SQL sanlar ýaly seneleri deňeşdirmegi başarýar.

Senelere deňeşdirme operatorlaryny ulanyp bolar: <, >, <= we ş.m. Mundan başga-da, seneler bilen işlemäge ukyply BETWEEN diýen ýörite operator bar. Geliň, mysal üçin task tablisasyndan 2022 ýylynyň tomsynda edilmegi gerek bolan ähli meseleleri saýlaýan sorag ýazalyň. Sorag şeýle bolar:

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

Bu soragyň netijesi şeýle bolar:

id emploee_id name deadline
1 1 Frontend-de ýalňyşlygy düzetmek 2022-06-01
2 2 Backend-de ýalňyşlygy düzetmek 2022-06-15
3 5 Kofe satyn almak 2022-07-01
4 5 Kofe satyn almak 2022-08-01

Emma soňky 30 günüň meselelerini almak üçin soragda näme ýazmaly? Soňky 30 gün sorag ýerine ýetirilýän wagty bilen göniden-göni baglanyşykly. Mysal üçin, sorag 25 iýulda ýerine ýetirilse, 25 iýundan 24 iýula çenli seneler saýlanmaly. Seneler aralygyny häzirki wagta nädip baglamaly?

Muňa seneleri goşma funksiýasyny ulanmak bilen ýetip bolar:


DATE_ADD (sene, INTERVAL ifade birimler) 

Mysal arkaly düşündirmek has aňsat bolar diýip pikir edýärin:

# Sorag Netije
1 DATE_ADD('2022-06-04', INTERVAL 5 DAY) 2022-06-09
2 DATE_ADD('2022-06-04', INTERVAL 4 WEEK) 2022-07-02
3 DATE_ADD('2022-06-04', INTERVAL 2 MONTH) 2022-08-04
4
5 DATE_SUB('2022-06-04', INTERVAL 5 DAY) 2022-05-30
6 DATE_SUB('2022-06-04', INTERVAL 4 WEEK) 2022-05-07
7 DATE_SUB('2022-06-04', INTERVAL 2 MONTH) 2022-04-04

Bu arada, belli bir seneden belli bir gün, hepde, aý ýa-da ýyl çykaryp bolýar.

Bizim öňki soragymyza – soňky 30 günüň maglumatlaryny almaga dolanyp gelsek, bu aralygyň iki senesi gerek:

  • CURDATE() – aralygyň soňy
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) – aralygyň başy

Sorag şeýle bolar:

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

Bu soragyň netijesi şeýle bolar (bu gün 4 iýun 2022):

id emploee_id name deadline
1 1 Frontend-de ýalňyşlygy düzetmek 2022-06-01

Iki sene arasyndaky tapawudy nädip tapmaly

Ýene bir peýdaly funksiýa. Kämahal iki sene arasyndaky tapawudy günüň içinde hasaplamak gerek bolup biler. SQL üçin ýörite DATEDIFF() atly funksiýa bar.

Onuň bilen işlemek örän ýeňil:


DATEDIFF (sene1, sene2) 

Birinjiden ikinjini çykarmak gerek. Eger sene2 sene1-den soň gelse, netije negatiw bolar.

Bu arada, öňki soragymyzy DATEDIFF() funksiýasyny ulanyp täzeden ýazmaga bolýar. task tablisasyndan häzirki seneden 30 günden köp däl bolan ähli meseleleri saýlamaly. Sorag şeýle bolar:

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

Bu soragyň netijesi şeýle bolar (bu gün 4 iýun 2022):

id emploee_id name deadline
1 1 Frontend-de ýalňyşlygy düzetmek 2022-06-01
2 2 Backend-de ýalňyşlygy düzetmek 2022-06-15
3 5 Kofe satyn almak 2022-07-01

Bu gezek SQL üç setir tapdy. Öň bir setir bardy, şu gezek näme üçin üç setir?

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