Mencari acara dalam 30 hari terakhir
Tugas umum lainnya adalah mencari baris yang termasuk dalam rentang tanggal tertentu. Pada prinsipnya, ini tidak sulit jika tanggal awal dan akhir rentang sudah diperbaiki: SQL dapat membandingkan tanggal serta angka.
Operator perbandingan dapat diterapkan pada tanggal: < , > , <= , dll. Selain itu, ada operator BETWEEN khusus yang juga dapat bekerja dengan tanggal. Misalnya, mari tulis kueri yang akan memilih semua tugas dari tabel tugas yang harus diselesaikan pada musim panas 2022. Permintaan akan terlihat seperti ini:
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
Hasil dari kueri ini adalah:
pengenal | employee_id | nama | tenggat waktu |
---|---|---|---|
1 | 1 | Perbaiki bug di frontend | 01-06-2022 |
2 | 2 | Perbaiki bug di backend | 15-06-2022 |
3 | 5 | Beli kopi | 01-07-2022 |
4 | 5 | Beli kopi | 01-08-2022 |
Tapi apa yang harus ditulis di permintaan jika kita ingin mendapatkan tugas, misalnya selama 30 hari terakhir. Di mana 30 hari terakhir terkait langsung dengan waktu eksekusi kueri. Artinya, jika kueri dijalankan pada 25 Juli, maka Anda harus memilih tanggal dari 25 Juni hingga 24 Juli. Bagaimana cara mengikat rentang tanggal ke waktu saat ini?
Untuk melakukannya, gunakan fungsi penambahan tanggal:
DATE_ADD (date, INTERVAL expression units)
Saya pikir akan lebih mudah untuk menjelaskan dengan beberapa contoh:
# | Meminta | Hasil |
---|---|---|
1 | DATE_ADD('2022-06-04', INTERVAL 5 HARI) | 09-06-2022 |
2 | DATE_ADD('2022-06-04', INTERVAL 4 MINGGU) | 02-07-2022 |
3 | DATE_ADD('2022-06-04', INTERVAL 2 BULAN) | 04-08-2022 |
4 | ||
5 | DATE_SUB('2022-06-04', INTERVAL 5 HARI) | 30-05-2022 |
6 | DATE_SUB('2022-06-04', INTERVAL 4 MINGGU) | 07-05-2022 |
7 | DATE_SUB('2022-06-04', INTERVAL 2 BULAN) | 04-04-2022 |
Omong-omong, sejumlah hari, minggu, bulan, dan tahun tertentu juga dapat dikurangi dari tanggal tertentu.
Dan jika kami kembali ke permintaan kami - untuk mendapatkan data selama 30 hari terakhir, maka kami memerlukan dua tanggal dalam rentang ini:
- CURDATE() - akhir rentang
- DATE_SUB( CURDATE() , INTERVAL 30 DAY) - rentang awal
Permintaan akan terlihat seperti ini:
SELECT * FROM task WHERE task.deadline
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE()
Hasil dari kueri ini akan menjadi seperti ini (saya punya hari ini 4 Juni 2022):
pengenal | employee_id | nama | tenggat waktu |
---|---|---|---|
1 | 1 | Perbaiki bug di frontend | 01-06-2022 |
Bagaimana menemukan perbedaan antara dua tanggal
Dan fitur bermanfaat lainnya. Terkadang Anda mungkin perlu menghitung perbedaan antara dua tanggal dalam beberapa hari. Untuk melakukan ini, SQL memiliki fungsi khusus - DATEDIFF ().
Sangat mudah untuk bekerja dengannya:
DATEDIFF (date 1, date 2)
Tanggal kedua hanya dikurangi dari tanggal pertama. Jika tanggal2 datang setelah tanggal1, maka hasilnya akan negatif.
Omong-omong, kita bisa menulis ulang kueri kita sebelumnya menggunakan fungsi DATEDIFF(). Kita perlu memilih semua tugas dari tabel tugas yang batas waktunya berbeda dari tanggal saat ini tidak lebih dari 30 hari. Seperti inilah permintaan itu:
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
Hasil dari kueri ini akan menjadi seperti ini (saya punya hari ini 4 Juni 2022):
pengenal | employee_id | nama | tenggat waktu |
---|---|---|---|
1 | 1 | Perbaiki bug di frontend | 01-06-2022 |
2 | 2 | Perbaiki bug di backend | 15-06-2022 |
3 | 5 | Beli kopi | 01-07-2022 |
Kali ini, SQL menemukan sebanyak tiga baris. Pikirkan mengapa terakhir kali ada satu baris, dan kali ini ada tiga baris?
GO TO FULL VERSION