Son 30 gündeki etkinlikleri arıyorum
Diğer bir yaygın görev, belirli bir tarih aralığına ait satırları aramaktır. Prensip olarak, aralığın başlangıç ve bitiş tarihleri sabitse bu zor değildir: SQL, sayıların yanı sıra tarihleri de karşılaştırabilir.
Karşılaştırma işleçleri tarihlere uygulanabilir: < , > , <= , vb. Ayrıca, tarihlerle de çalışabilen özel bir BETWEEN işleci vardır. Örneğin 2022 yazında yapılması gereken tüm görevleri görev tablosundan seçecek bir sorgu yazalım. İstek şöyle görünecektir:
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
Bu sorgunun sonucu şöyle olacaktır:
İD | çalışan kimliği | isim | son teslim tarihi |
---|---|---|---|
1 | 1 | Ön uçtaki bir hatayı düzeltin | 2022-06-01 |
2 | 2 | Arka uçtaki bir hatayı düzeltin | 2022-06-15 |
3 | 5 | kahve satın al | 2022-07-01 |
4 | 5 | kahve satın al | 2022-08-01 |
Ancak, örneğin son 30 gün için görevler almak istiyorsak, talebe ne yazmalıyız. Son 30 günün doğrudan sorgu yürütme süresine bağlı olduğu yer. Yani, sorgu 25 Temmuz'da yürütülürse, 25 Haziran ile 24 Temmuz arasında tarihler seçmeniz gerekir. Bir tarih aralığını şimdiki zamana nasıl bağlayabilirim?
Bunu yapmak için tarih ekleme işlevini kullanın:
DATE_ADD (date, INTERVAL expression units)
Birkaç örnekle açıklamak daha kolay olur sanıyorum:
# | Rica etmek | Sonuç |
---|---|---|
1 | DATE_ADD('2022-06-04', INTERVAL 5 GÜN) | 2022-06-09 |
2 | DATE_ADD('2022-06-04', ARALIK 4 HAFTA) | 2022-07-02 |
3 | DATE_ADD('2022-06-04', ARALIK 2 AY) | 2022-08-04 |
4 | ||
5 | DATE_SUB('2022-06-04', ARALIK 5 GÜN) | 2022-05-30 |
6 | DATE_SUB('2022-06-04', ARALIK 4 HAFTA) | 2022-05-07 |
7 | DATE_SUB('2022-06-04', ARALIK 2 AY) | 2022-04-04 |
Bu arada, belirli sayıda gün, hafta, ay ve yıl da belirli bir tarihten çıkarılabilir.
Son 30 güne ait verileri almak için talebimize geri dönersek, bu aralıkta iki tarihe ihtiyacımız var:
- CURDATE() - aralığın sonu
- DATE_SUB( CURDATE() , INTERVAL 30 DAY) - aralığın başlangıcı
İstek şöyle görünecektir:
SELECT * FROM task WHERE task.deadline
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE()
Bu sorgunun sonucu şöyle olacak (Bugün 4 Haziran 2022'ye sahibim):
İD | çalışan kimliği | isim | son teslim tarihi |
---|---|---|---|
1 | 1 | Ön uçtaki bir hatayı düzeltin | 2022-06-01 |
İki tarih arasındaki fark nasıl bulunur?
Ve başka bir kullanışlı özellik. Bazen iki tarih arasındaki farkı gün cinsinden hesaplamanız gerekebilir. Bunu yapmak için SQL'in özel bir işlevi vardır - DATEDIFF ().
Onunla çalışmak çok kolay:
DATEDIFF (date 1, date 2)
İkinci tarih, ilk tarihten basitçe çıkarılır. Tarih2, tarih1'den sonra gelirse, sonuç negatif olur.
Bu arada, DATEDIFF() fonksiyonunu kullanarak önceki sorgumuzu yeniden yazabiliriz. Son tarihi geçerli tarihten 30 günden fazla farklı olmayan görev tablosundan tüm görevleri seçmemiz gerekiyor. İşte bu isteğin nasıl görüneceği:
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
Bu sorgunun sonucu şöyle olacak (Bugün 4 Haziran 2022'ye sahibim):
İD | çalışan kimliği | isim | son teslim tarihi |
---|---|---|---|
1 | 1 | Ön uçtaki bir hatayı düzeltin | 2022-06-01 |
2 | 2 | Arka uçtaki bir hatayı düzeltin | 2022-06-15 |
3 | 5 | kahve satın al | 2022-07-01 |
Bu sefer, SQL en fazla üç satır buldu. Geçen sefer neden bir satır olduğunu ve bu sefer üç satır olduğunu bir düşünün.