Faites la différence entre deux dates en mois et en jours en sql
J'ai besoin d'obtenir la différence entre deux dates de dire si la différence est de 84 jours, je devrais probablement avoir sortie que 2 mois et 14 jours, le code que je viens de donne les totaux. Voici le code
SELECT Months_between(To_date('20120325', 'YYYYMMDD'),
To_date('20120101', 'YYYYMMDD'))
num_months,
( To_date('20120325', 'YYYYMMDD') - To_date('20120101', 'YYYYMMDD') )
diff_in_days
FROM dual;
De sortie est:
NUM_MONTHS DIFF_IN_DAYS
2.774193548 84
J'ai besoin par exemple le résultat de cette requête soit 2 mois et 14 jours au pire, sinon, je ne m'en voudrez pas si je peux avoir l'exacte jours après le mois la figure parce que ces jours ne sont pas vraiment 14 car tous les mois n'ont pas 30 jours.
source d'informationauteur ErrorNotFoundException
Vous devez vous connecter pour publier un commentaire.
Résultats:
Lien de test: SQLFiddle
Mis à jour pour l'exactitude. Initialement répondu par @jen.
SQLFiddle Démo :
Avis, comment faire pour les deux dernières dates, Oracle rapports de la partie décimale d'un mois (ce qui donne jours) de façon incorrecte.
0.1290
correspond exactement4
jours avec Oracle considérant31
jours dans un mois (Mars et avril).Je pense que votre question n'est pas défini assez bien, pour la raison suivante.
Réponses en s'appuyant sur months_between avoir à traiter avec le problème suivant: que la fonction rapports exactement un mois entre 2013-02-28 et 2013-03-31, et entre 2013-01-28 et 2013-02-28, et entre 2013-01-31 et 2013-02-28 (je soupçonne que certains answerers n'ont pas utilisé ces fonctions dans la pratique, ou allez maintenant avoir à passer en revue certaines de production de code!)
Ce comportement documenté, dans lequel les dates qui sont à la fois le dernier dans leur mois ou qui tombe le même jour du mois qui sont jugés être un nombre entier de mois d'intervalle.
Ainsi, vous obtenez le même résultat de "1" lorsque l'on compare 2013-02-28 avec 2013-01-28 ou avec 2013-01-31, mais en la comparant avec 2013-01-29 ou 2013-01-30 donne 0.967741935484 et 0.935483870968 respectivement -- alors que l'on approche de la date de l'autre, la différence signalée par cette fonction peut augmenter.
Si cette situation n'est pas acceptable, alors vous aurez à écrire une fonction plus complexe, ou simplement s'appuyer sur un calcul qui suppose 30 (par exemple) jours par mois. Dans ce dernier cas, comment allez-vous gérer 2013-02-28 et 2013-03-31?
est-ce que vous avez ment ?
Ici, je fais juste la différence entre, d'une part, et un
CREATED_DATE
DATE
champ dans une table, ce qui évidemment est une date dans le passé:J'utilise (365/12), ou 30.416667, que mon facteur de conversion parce que je suis en utilisant le total des jours et retrait des années et des mois (en jours) pour obtenir le reste nombre de jours. Il a été assez bon pour mes fins, de toute façon.
La solution que j'ai post va considérer un mois de 30 jours
MsSql Syntaxe : DATEDIFF ( datepart , date de début , date de fin )
Oracle: Cela renvoie le nombre de jours
Démo : http://sqlfiddle.com/#!4/c26e8/36
Découvrez Année - Mois - Jour entre deux Jours à l'Orale Sql
Voir la question ci-dessous (supposé @dt1 >= @dt2);
Retourne: