Mois entre deux dates de la fonction
Dans oracle je peux trouver aucune:de mois entre l'utilisation de MONTHS_BETWEEN fonction.
Dans postgres, je suis à l'aide de l'extrait de fonction pour cela.
par exemple.comme
select
extract(year from age(current_date, '2012-12-09')) * 12
+
extract(month from age(current_date, '2012-12-09'))
Est-il d'autres méthodes(fonctions intégrées) dans postgres??
même j'ai utilisé de la même manière
OriginalL'auteur jobi88 | 2013-01-10
Vous devez vous connecter pour publier un commentaire.
C'est facile de re-mettre en œuvre dans PostgreSQL, juste à l'aide de fonctions SQL pour ranger ce que vous avez déjà:
Et maintenant
select months_between('1978-06-20', '2011-12-09')
produit 401.months_between('2012-01-01', '2012-01-31')
renvoie 0 pour que l'intervalle de 30 jours. Mais à l'aide demonths_between('2012-02-01', '2012-03-01')
retourne la valeur 1 à 29 jours d'intervalle. La petite histoire c'est que vous doit pour définir ce "mois" désigne dans votre application avant de commencer à écrire du code.Votre commentaire est tout à fait valable, mais ne devrait-elle pas être adressées à l'OP? araqnid du code se comporte exactement comme l'OP du code n'donc je suppose que c'est ce qu'il veut.
Je ne sais pas. Je upvoted araqnid de réponse. Dans mon expérience, la plupart des gens qui utilisent des fonctions comme ceci ne pas pensez à ce que mois ou numéro de la semaine devrait impliquer dans leur application. Ils utilisent tout ce qu'ils trouvent. (C'est un constat, pas une critique.) L'OP n'a pas accepté une réponse, donc j'attends de lui de lire tout ça, tôt ou tard. Peut-être que je suis trop optimiste.
Bons points, et je suis d'accord que la coopérative doit comprendre/deviner ce qu'il doit être défini pour sa situation.
OriginalL'auteur araqnid
Malheureusement, il ne semble pas, car
extract(month ...)
retourne le nombre de mois modulo 12.Il y a une petite simplification, vous pouvez faire; supprimer le premier paramètre de
age()
- la valeur par défaut est l'âge à partir decurrent_date
, de sorte que ces deux sont équivalentes:age('2012-12-09')
produira une erreur (postgresql 9.2.1) en raison de l'inconnu type d'argument. Vous devez spécifierage('2012-12-09'::date)
OriginalL'auteur Bohemian
Vous pouvez utiliser de l'UDF, par exemple, j'ai trouvé ce qui suit ici:
OriginalL'auteur Tomas Greif
OriginalL'auteur atiruz