Comment calculer le mois et les jours entre deux dates

la programmation


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

SQL
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

SQL
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

SQL
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

mois et jours entre deux dates sql – Recherche Google[^]. Il a fallu 5 secondes pour trouver.

Solution 4

SQL
 --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…

SQL
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
;

コメント

タイトルとURLをコピーしました