2010-07-07 4 views
0

Je suis désireux de faire des requêtes sur une table de vente et une table d'achats, des choses comme montrant le coût total, ou les ventes totales d'un élément particulier, etc.requêtes SQL avec des types de date

Ces deux tableaux ont également un champ de date, qui stocke les dates au format sortable (juste valeur par défaut, je suppose?)

Je me demande comment je ferais les choses avec ce champ de date dans le cadre de ma requête à utiliser des plages de dates telles que:

L'année dernière, à partir de n'importe quelle date de l'année

Les 30 derniers jours, à partir un jour donné

Pour afficher mois ensemble, comme Janvier, Fevrier, etc.

-ce que ces types de requêtes possibles tout en utilisant un champ de date, ou serait-il plus facile de stocker mois et des années en tant que champs séparés de tex?

+1

Pas une solution complète, mais consultez les fonctions DAY(), MONTH() et YEAR() pour T-SQL. Vous n'avez pas besoin de stocker les données séparément. –

Répondre

2

Si un my_date champ date donnée, vous pouvez effectuer les 3 opération en utilisant various date fonctions:

1. Sélectionnez dernières années enregistre

SELECT * FROM MY_TABLE 
WHERE YEAR(my_date) = YEAR(CURDATE()) - 1 

2. 30 derniers jours

SELECT * FROM MY_TABLE 
WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) < MY_DATE 

3. Montrez le mo nième nom

SELECT MONTHNAME(MY_DATE), * FROM MY_TABLE 
+0

Existe-t-il un moyen de montrer tous les enregistrements de l'année en cours, ne remontant pas aux 12 derniers mois ?, par exemple en juillet il montrerait seulement les 6 derniers mois et un peu? –

+0

@Jacob, si vous changez la première clause where en 'WHERE YEAR (my_date) = YEAR (CURDATE())' qui ne devrait sélectionner que les lignes de l'année en cours. – krock

1

Je l'ai toujours trouvé avantageux de stocker les dates que Unix timestamps. Ils sont extrêmement faciles à trier et à interroger par plage, et MySQL a des fonctions intégrées qui aident (comme UNIX_TIMESTAMP() et FROM_UNIXTIME()).

Vous pouvez les stocker dans des colonnes INT (11); lorsque vous programmez avec eux, vous apprenez rapidement qu'un jour est de 86400 secondes, et vous pouvez obtenir des plages plus complexes en multipliant cela par un nombre de jours (par exemple, un mois est assez proche de 86400 * 30 et les langages de programmation convertir vers et à partir d'eux intégrés dans des bibliothèques standard).

Questions connexes