S výjimkou denní dobu od prvního dne v týdnu v MySQL dotazu

hlasů
1

Snaží vybrat data z určité dny v týdnu, řekněme, od pondělí do pátku, ale v pátek to musí být před tím, než určitou dobu, řekněme, 4:30 odp. To je tahání z let dat, takže je to spíš filtru na horní části časové období. V současné době se vkládá se mohou vyfiltrovat pouze určité dny v týdnu:

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

Ale je třeba přidat podmínku do netahejte data, která byla vytvořena po 4:30 hodin v pátek. Něco jako:

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

S připočtením výše se wherebude to chytne pouze páteční před 4pm a před 30 minut za hodinu.

Nějaké návrhy?

Položena 10/10/2019 v 00:43
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Jedním z řešení by bylo přidat samostatnou sadu podmínek pro neděli. Také bych doporučujeme použít WEEKDAY()(den číslo týdne, počínaje pondělí), protože to umožňuje zkrátit dotazu pomocí operátor porovnání BETWEEN:

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

Pokud chcete, 4:30 PM namísto 4 hodin, pak můžete použít mírně odlišný přístup a extrahovat celou časovou část datetime pro srovnání:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND CONVERT(created, time) <= '16:30')
Odpovězeno 10/10/2019 v 00:51
zdroj uživatelem

hlasů
0

By se něco takového vyřešit váš problém?

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;
Odpovězeno 10/10/2019 v 00:48
zdroj uživatelem

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