Wyłączając porze dnia od dnia tygodnia w zapytaniu MySQL

głosy
1

Starając się wybrać dane z określonych dniach tygodnia, powiedzmy, od poniedziałku do piątku, ale w piątek musi być przed upływem określonego czasu, powiedzmy 4:30 pm. To ciągnie od lat danych, więc jest to bardziej filtra na szczycie zakresu dat. Obecnie stosowany jest następujący odfiltrować tylko niektóre dni tygodnia:

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

Ale trzeba dodać warunek, aby wolno ciągnąć dane, które zostały utworzone po 4:30 po południu w piątek. Coś jak:

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

Dzięki dodaniu wyżej whereto będzie tylko chwyta Friday 's przed 4pm i przed upływem 30 minut na godzinę.

Jakieś sugestie?

Utwórz 10/10/2019 o 00:43
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Jednym z rozwiązań byłoby dodać osobny zestaw warunków do niedzieli. Również polecam korzystania WEEKDAY()(numer dnia tygodnia, począwszy od poniedziałku), dlatego, że pozwala skrócić zapytanie za pomocą operatora porównania BETWEEN:

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

Jeśli chcesz 4:30 pm zamiast 4 po południu, a następnie można użyć nieco innego podejścia i wyodrębnić całą część czasu datetime dla porównania:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND CONVERT(created, time) <= '16:30')
Odpowiedział 10/10/2019 o 00:51
źródło użytkownik

głosy
0

Czy coś takiego w rozwiązaniu problemu?

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;
Odpowiedział 10/10/2019 o 00:48
źródło użytkownik

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