[ad_1]
Salut les amis,
Je dois calculer le nombre total. Des mois et des jours entre deux dates. J’ai un problème dans cette requête. S’il vous plaît aidez-moi.
Dans cette requête le 22/07/2021 et le 23/06/2021
Ans montre 1 jour. Mais la vraie réponse est de 29 jours.
Ce que j’ai essayé :
select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)
Solution 5
La solution 4 ne fonctionnera pas si la période comprend une année bissextile (car elle suppose 365 jours dans une année, ou une durée moyenne de mois en jours de 30).
Par exemple, essayez ce code avec un @ToDate de « 2024-08-19 » et il renverra 3 ans 1 mois et 28 Jours
Essayez plutôt cette approche
– Calculez le nombre de mois entre les deux dates et divisez par 12 pour obtenir la différence en années complètes
– Ajoutez ce nombre d’années à la date de début pour donner une date intermédiaire et faciliter la vie
– Calculez le nombre de JOURS entre la nouvelle date intermédiaire et la date de fin. Divisez ce nombre de jours par 30,5 pour obtenir le nombre de mois complets entre les dates.
– Ajoutez ce nombre de mois à la date intermédiaire
– Calculer le nombre de jours entre la (nouvelle) date intermédiaire et la date de fin
declare @years int = (SELECT CAST(DATEDIFF(MONTH, @fromdate, @todate) / 12 as int)); declare @interimDate date = (SELECT DATEADD(YEAR, @years, @fromdate)); declare @months int = (SELECT CAST(DATEDIFF(DAY, @interimDate, @todate) / 30.5 as int)); set @interimDate = (SELECT DATEADD(MONTH, @months, @interimDate)); declare @days int = (SELECT DATEDIFF(DAY, @interimDate, @todate));
Pour ces données de test
DECLARE @FromDate DATE = '2021-06-23'; DECLARE @ToDate DATE = '2023-08-19';
vous obtiendrez 2 ans 1 mois 27 jours et pour ces données de test
DECLARE @FromDate DATE = '2021-06-23'; DECLARE @ToDate DATE = '2024-08-19';
tu auras 3 ans 1 mois 27 Jours
Solution 1
-- this gives you 23 select@days=datepart(d,@currentdatetime) -- this gives you 22 datepart(d,@dateofbirth)
23 – 22 = 1
Solution 2
Solution 4
--Please use the following script, might be the following script will give you your final solution, DECLARE @FromDate DATE =CONVERT(DATE,'23/06/2021',103) -- DD/MM/YYYY DECLARE @ToDate DATE = CONVERT(DATE,'19/08/2023',103) -- DD/MM/YYYY SELECT DATEDIFF(DAY,@FromDate,@ToDate) [TotalDays] --787 days --Query to find the number of Years, Months, Days... SELECT DATEDIFF(YEAR,@FromDate,@ToDate) as [Years], (DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30 as [Months], DATEDIFF(DAY,@FromDate,@ToDate) - ( (DATEDIFF(YEAR,@FromDate,@ToDate)*365) + (((DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30)*30)) as [Days] --OutPut - Years Months Days -- 2 1 27 --Thanks..!!!
Solution 6
ça marche pour moi…
DECLARE @sd DATE = '2024-01-15' ,@ed DATE = '2028-02-05' ,@y INT ,@m INT ,@d INT ,@d01 DATE ,@d02 DATE ; SELECT @y = DATEDIFF (YEAR , @sd , @ed ) ; SELECT @d01 = DATEADD (YEAR , @y , @sd ) ; SELECT @m = DATEDIFF (MONTH , @d01 , @ed ) ; SELECT @d02 = DATEADD (MONTH , @m , @d01 ) ; SELECT @d = DATEDIFF (DAY , @d02 , @ed ) ; if (@d < 0) BEGIN SELECT @m -= 1 ; SELECT @d02 = DATEADD(MONTH, @m, @d01) ; SELECT @d = DATEDIFF(DAY, @d02, @ed) ; END ; SELECT @sd, @ed, @y, @m, @d ;
[ad_2]
コメント