Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Od sygnatury czasowej w SQL, wybierając rekordy z dzisiaj, wczoraj, w tym tygodniu, w tym miesiącu i pomiędzy dwiema datami php mysql

Jeśli wybierasz tylko według daty, oprzyj swoje obliczenia na CURDATE (co zwraca tylko datę) zamiast NOW (który zwraca datę i godzinę). Te przykłady uchwycą wszystkie czasy w zakresie dnia:

  • Dzisiaj:WHERE timestamp >= CURDATE()
  • Wczoraj:WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND timestamp < CURDATE()
  • W tym miesiącu:WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY)
  • Między dwiema datami 3 czerwca 2013 r. i 7 czerwca 2013 r. (zwróć uwagę, jak data końcowa jest określona jako 8 czerwca, a nie 7 czerwca):WHERE timestamp >= '2013-06-03' AND timestamp < '2013-06-08'

„Ten tydzień” zależy od tego, w którym dniu zaczynasz tydzień; Zostawię to tobie. Możesz użyć DAYOFWEEK funkcja do dostrajania CURDATE() we właściwych zakresach.

Uzupełnienie :typ kolumny OP to INTEGER , przechowując znacznik czasu UNIX, a moja odpowiedź zakładała, że ​​typ kolumny to TIMESTAMP . Oto jak zrobić te same rzeczy z wartością znacznika czasu UNIX i nadal utrzymywać optymalizację, jeśli kolumna jest indeksowana (tak jak powyższe odpowiedzi zrobią, jeśli TIMESTAMP kolumna jest indeksowana)...

Zasadniczo rozwiązaniem jest po prostu zawinięcie dat rozpoczęcia i/lub zakończenia w UNIX_TIMESTAMP funkcja:

  • Dzisiaj:WHERE timestamp >= UNIX_TIMESTAMP(CURDATE())
  • Wczoraj:WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AND timestamp < UNIX_TIMESTAMP(CURDATE())
  • W tym miesiącu:WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY))
  • Między dwiema datami 3 czerwca 2013 r. i 7 czerwca 2013 r. (zwróć uwagę, jak data końcowa jest określona jako 8 czerwca, a nie 7 czerwca):WHERE timestamp >= UNIX_TIMESTAMP('2013-06-03') AND timestamp < UNIX_TIMESTAMP('2013-06-08')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kłopotliwe zachowanie arytmetyczne php/Mysql w czasie

  2. Jaka jest definicja kardynalności w SQL?

  3. Uzyskaj wartości Min i Max za pomocą jednego zapytania MySQL z Group BY

  4. Jak mogę wyczyścić pamięć podczas uruchamiania długiego skryptu PHP? próbowałem unset()

  5. Import MySQL 5.7.12 nie może utworzyć wartości JSON z ciągu z CHARACTER SET „binary”