Chcę zwrócić wszystkie rekordy, które zostały dodane do bazy danych w ciągu ostatnich 30 dni. Muszę przekonwertować datę na mm / dd / rr ze względu na wyświetlanie.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
Mój wyciąg nie ogranicza rekordów do ostatnich 30 dni - wybiera wszystkie rekordy.
Czy ktoś może wskazać mi właściwy kierunek? Czuję, że jestem blisko.
Dzięki i życzę miłego tygodnia.
źródło
DATE_FORMAT(create_date, '%m/%d/%Y')
... WHERE create_date BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW()
DATE_FORMAT
zwraca ciąg, więc używasz dwóch ciągów w swoimBETWEEN
klauzuli , co nie będzie działać zgodnie z oczekiwaniami.Zamiast tego przekonwertuj datę na swój format w formacie
SELECT
iBETWEEN
zastosuj daty rzeczywiste. Na przykład,źródło
Możesz również napisać to w mysql -
NAPRAWIONY
źródło
Użyj tego dla aktualnej daty i pełnej aktywności z poprzednich 30 dni, ponieważ SYSDATE jest zmienna w dniu, w którym poprzedni 30-ty dzień nie będzie zawierał pełnych danych z tego dnia.
źródło
Oto rozwiązanie bez użycia
curdate()
funkcji, jest to rozwiązanie dla tych, którzy używająTSQL
Chybaźródło