MySQL sorguda haftanın gününden itibaren günün saatini Hariç

oy
1

haftanın belirli günlerinde gelen verileri seçmek için çalışılıyor, pazartesi-cuma diyelim, ama Cuma günü belli saatinden ÖNCE olması gerekir, en 4:30 pm diyelim. Bu verilerin yaşındaki çekerek, bu nedenle bir tarih aralığında üstünde bir filtrenin fazla. Şu anda şu haftanın sadece belirli günleri filtrelemek için kullanılır:

SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');

Ama Cuma günü 4:30 sonra oluşturulan veri çekme DEĞİL bir koşul eklemesi gerekir. Gibi bir şey:

DAYNAME(created) = Friday AND HOUR(created) <= 16 AND MINUTE(created) <= 30

Yukarıdaki ekleyerek sayesinde whereistendiğinde sadece Cuma günü 4 de önce ve saat 30 dakika önce yakalar.

Baska öneri?

Oluştur 10/10/2019 saat 00:43
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Bir çözüm Pazar koşullarının ayrı kümesi eklemek olacaktır. Ayrıca kullanıyorum tavsiye ederim WEEKDAY()o size karşılaştırma operatörünü kullanarak sorguyu kısaltmak sağlar, çünkü (haftanın günü sayısını, Pazartesinden başlar) BETWEEN:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND HOUR(created) <= 16)

yerine 4 PM 04:30 PM istiyorsanız, o zaman biraz daha farklı bir yaklaşım kullanmak ve karşılaştırma için datetime bütün zaman bölümünü çıkarabilir:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND CONVERT(created, time) <= '16:30')
Cevap 10/10/2019 saat 00:51
kaynak kullanıcı

oy
0

Böyle bir şey sorununuzu çözdü istiyorsunuz?

SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
AND HOUR(created) <= CASE WHEN DAYNAME(created) = "Friday" THEN 16 ELSE 24 END;
Cevap 10/10/2019 saat 00:48
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more