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

Wybierz rekordy bieżącego miesiąca mysql z kolumny sygnatury czasowej

AKTUALIZUJ

O wiele lepszy, przyjazny dla indeksów sposób wyszukiwania danych dla zakresu dat

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
   AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);

Uwaga: Nie stosujesz żadnej funkcji do danych kolumny, ale raczej wykonujesz wszystkie niezbędne obliczenia po prawej stronie warunków (które są stałymi i są obliczane tylko raz po wykonaniu). W ten sposób pozwalasz MySQL na korzystanie z indeksów, które możesz mieć w timestampfield kolumna.

Oryginalna odpowiedź:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())

Uwaga: Chociaż to zapytanie daje poprawne wyniki, skutecznie unieważnia prawidłowe użycie indeksów, które możesz mieć w timestampfield kolumna (co oznacza, że ​​MySQL zostanie zmuszony do wykonania pełnego skanowania)

Oto SQLFiddle demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana znaczenia dwukropka „:” w zapytaniach JPA

  2. Symulowanie grup przechwytywania wyrażeń regularnych w mysql

  3. Przejście z MySQL 5.7 do MySQL 8.0 — co powinieneś wiedzieć

  4. Jakie sortowanie MySQL jest najlepsze do akceptowania wszystkich znaków Unicode?

  5. Laravel 4:Gdzie nie istnieje