Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez les enregistrements des mois en cours mysql à partir de la colonne d'horodatage

MISE À JOUR

Un moyen beaucoup plus convivial d'interroger vos données pour une plage de dates

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

Remarque : Vous n'appliquez aucune fonction aux données de votre colonne, mais effectuez plutôt tous les calculs nécessaires sur le côté droit des conditions (qui sont des constantes et ne sont évaluées qu'une seule fois après l'exécution). De cette façon, vous permettez à MySQL de bénéficier du ou des index que vous pourriez avoir sur le champ timestampfield colonne.

Réponse originale :

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

Remarque : Bien que cette requête produise les résultats corrects, elle invalide effectivement l'utilisation correcte du ou des index que vous pourriez avoir sur le timestampfield colonne (ce qui signifie que MySQL sera obligé d'effectuer une analyse complète)

Voici SQLFiddle démo