2009-04-09 8 views
3

Je voudrais faire des calculs agrégés basés sur le mois pour un champ datetime.Sélection des formats de date pour les calculs agrégés à partir de la base de données avec Django

Je suis actuellement en utilisant la fonction supplémentaire() pour formater la date comme:

...extra(select="strftime('column', '%m/%Y') as t").values('t').annotate(SUM(foo)) 

et il fonctionne très bien pour sqlite3.

En sqlite3, je peux utiliser strftime(), mais cela ne fonctionne pas avec MySQL. Dans MySQL, je peux utiliser date_format(), mais cela ne fonctionne pas avec sqlite3.

Comment puis-je réécrire cela pour travailler pour les deux types de base de données?

La plupart des développeurs utilisent simplement sqlite3 sur leurs machines dev, et MySQL est utilisé sur le serveur prod.

Merci!

Répondre

6

Exécutez les opérations suivantes dans votre base de données MySQL pour créer une fonction de transfert.

delimiter // 

create function strftime (d date, format varchar(255)) 
    RETURNS varchar(64) 
    LANGUAGE SQL 
    DETERMINISTIC 
    COMMENT 'synonym for date_format' 
    return date_format(d, format) ; 
// 
delimiter ; 
+1

Merci! Je n'ai pas encore tout compris. Où puis-je en savoir plus sur les fonctions MySQL personnalisées? J'ai regardé ici, mais je n'ai pas trouvé beaucoup: http://dev.mysql.com/doc/refman/5.0/fr/adding-functions.html –

+0

Ça a marché. Dans votre exemple, les paramètres de la fonction personnalisée doivent être classés comme suit: nom_paramètre type_données. Il devrait donc dire: créer une fonction strftime (d datetime, format varchar (255)) Merci pour le guidage! –

+0

Ouais, je fouettais entre l'identifiant de type C/C++/Java et le type d'identificateur de SQL. Je suppose que j'ai eu un coup de fouet cervical. Ou un coup de fouet. – tpdi

Questions connexes