Nggolek acara ing pungkasan 30 dina

Tugas umum liyane yaiku nggoleki baris sing kalebu ing sawetara tanggal tartamtu. Ing asas, iki ora angel yen tanggal wiwitan lan pungkasan saka sawetara tetep: SQL bisa mbandhingaké tanggal uga nomer.

Operator perbandingan bisa ditrapake kanggo tanggal: < , > , <= , lsp. Kajaba iku, ana operator ANTARA khusus sing uga bisa nggarap tanggal. Contone, ayo nulis pitakon sing bakal milih kabeh tugas saka tabel tugas sing kudu ditindakake ing musim panas 2022. Panjaluk kasebut bakal katon kaya iki:

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

Asil saka pitakonan iki bakal dadi:

id id_karyawan jeneng deadline
1 1 Ndandani bug ing frontend 2022-06-01
2 2 Ndandani bug ing backend 2022-06-15
3 5 Tuku kopi 2022-07-01
4 5 Tuku kopi 2022-08-01

Nanging apa sing kudu ditulis ing panyuwunan yen pengin entuk tugas, umpamane, suwene 30 dina. Ngendi 30 dina pungkasan langsung disambungake karo wektu eksekusi query. Yaiku, yen pitakon ditindakake tanggal 25 Juli, mula sampeyan kudu milih tanggal saka 25 Juni nganti 24 Juli. Kepiye cara ngiket sawetara tanggal menyang wektu saiki?

Kanggo nindakake iki, gunakake fungsi tambahan tanggal:

DATE_ADD (date, INTERVAL expression units)

Aku bakal luwih gampang nerangake kanthi sawetara conto:

# Panjaluk asil
1 DATE_ADD('2022-06-04', INTERVAL 5 HARI) 2022-06-09
2 DATE_ADD('2022-06-04', INTERVAL 4 MINGGU) 2022-07-02
3 DATE_ADD('2022-06-04', INTERVAL 2 WULAN) 2022-08-04
4
5 DATE_SUB('2022-06-04', INTERVAL 5 HARI) 30-05-2022
6 DATE_SUB('2022-06-04', INTERVAL 4 MINGGU) 2022-05-07
7 DATE_SUB('2022-06-04', INTERVAL 2 WULAN) 2022-04-04

Miturut cara, sawetara dina, minggu, sasi lan taun tartamtu uga bisa dikurangi saka tanggal tartamtu.

Lan yen kita bali menyang panyuwunan - kanggo entuk data suwene 30 dina, mula kita butuh rong tanggal ing kisaran iki:

  • CURDATE() - mburi sawetara
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) - wiwitan kisaran

Panjaluk kasebut bakal katon kaya iki:

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

Asil pitakon iki bakal kaya mangkene (aku duwe dina iki tanggal 4 Juni 2022):

id id_karyawan jeneng deadline
1 1 Ndandani bug ing frontend 2022-06-01

Carane nemokake prabédan antarane rong tanggal

Lan fitur migunani liyane. Kadhangkala sampeyan kudu ngetung prabédan antarane rong tanggal ing dina. Kanggo nindakake iki, SQL duwe fungsi khusus - DATEDIFF ().

Gampang banget nggarap dheweke:

DATEDIFF (date 1, date 2)

Tanggal kapindho mung dikurangi saka tanggal pisanan. Yen date2 teka sawise date1, banjur asil bakal negatif.

Miturut cara, kita bisa nulis ulang pitakon sadurunge nggunakake fungsi DATEDIFF (). Kita kudu milih kabeh tugas saka tabel tugas sing deadline beda karo tanggal saiki ora luwih saka 30 dina. Mangkene panjaluk kasebut:

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

Asil pitakon iki bakal kaya mangkene (aku duwe dina iki tanggal 4 Juni 2022):

id id_karyawan jeneng deadline
1 1 Ndandani bug ing frontend 2022-06-01
2 2 Ndandani bug ing backend 2022-06-15
3 5 Tuku kopi 2022-07-01

Wektu iki, SQL nemokake nganti telung larik. Coba pikirake kenapa pungkasane ana siji baris, lan wektu iki ana telu?