sql >> Databáze >  >> RDS >> Mysql

Vyberte záznamy aktuálních měsíců mysql ze sloupce časového razítka

AKTUALIZACE

Mnohem lepší způsob, jak se dotazovat na data pro rozsah dat, který je vhodný pro indexy

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);

Poznámka: Na data ve sloupcích neaplikujete žádnou funkci, ale všechny potřebné výpočty provádíte na pravé straně podmínek (což jsou konstanty a jsou vyhodnoceny pouze jednou po provedení). Tímto způsobem umožníte MySQL těžit z indexů, které můžete mít v timestampfield sloupec.

Původní odpověď:

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

Poznámka: Ačkoli tento dotaz poskytuje správné výsledky, účinně znehodnocuje správné použití indexů, které byste mohli mít v timestampfield sloupec (to znamená, že MySQL bude nuceno provést úplné skenování)

Zde je SQLFiddle demo



  1. Jak zálohovat databázi Chamilo LMS MySQL

  2. MySQL SELECT nejčastější podle skupiny

  3. php jak ukládat a číst data json přes mysql?

  4. Použití Non-Capturing Groups v MySQL REGEXP