Próbuję uruchomić instrukcję mysql select, która wygląda na dzisiejszą datę i zwraca tylko wyniki zarejestrowane w tym dniu. Obecnie próbowałem następujących rozwiązań, ale wydaje się, że nie działają.
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d')
FROM users
WHERE users.signup_date = CURDATE()
Zmodyfikowałem moje SELECT
oświadczenie, dzięki chłopaki.
SELECT id FROM users WHERE DATE(signup_date) = CURDATE()
signup_date
jest to pole datetimesignup_date
jeśli zawiera czas, wtedy będziesz chciał użyć formatu date_format wWHERE
klauzuli, aby usunąć czas, aby dopasowaćCURDATE()
mysql_num_rows
nie wyświetla 0. Tylko puste miejsce.Odpowiedzi:
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE DATE(signup_date) = CURDATE()
źródło
DATETIME
.signup_date
, nawet jeśli taki indeks istnieje). Wolę rozwiązanie Serjio .< '2017-08-31 00:00:00'
jeśli używasz wersji MySQL z milisekundami.To zapytanie użyje indeksu, jeśli masz go dla
signup_date
polaSELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY)
źródło
signup_date
, w przeciwieństwie do innych podejść.signup_date
między dwoma czasami jest poprawna, ale czasy nie. Powinien przypadać pomiędzy00:00
i23:59:59
w bieżącym dniu.WHERE DATE(signup_date) = CURDATE()
Wziął mój serwer ~ 50 ms, ten tutaj 0,8 ms.Wygląda na to, że musisz dodać formatowanie do
WHERE
:SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE DATE_FORMAT(users.signup_date, '%Y-%m-%d') = CURDATE()
Zobacz SQL Fiddle with Demo
źródło
Można użyć
CONCAT
wCURDATE()
celu cały czas dnia, a następnie filtrować według używającBETWEEN
wWHERE
stanie:SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE (users.signup_date BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59'))
źródło