كيفية حساب الشهر والأيام بين تاريخين


مرحبا يا أصدقاء،
أحتاج إلى حساب العدد الإجمالي. من الأشهر والأيام بين تاريخين. لدي مشكلة في هذا الاستعلام الرجاء مساعدتي.
في هذا الاستعلام 22/07/2021 و 23/06/2021
الجواب يظهر 1 يوم. لكن الإجابة الفعلية هي 29 يومًا.

ما حاولت:

select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)

الحل 5

لن يعمل الحل 4 إذا كانت الفترة تتضمن سنة كبيسة (لأنها تفترض 365 يومًا في السنة، أو متوسط ​​طول الشهر في 30 يومًا).

على سبيل المثال، جرب هذا الرمز باستخدامToDate@2024-08-19 وسيعود 3 سنوات و1 شهر و 28 أيام
جرب هذا النهج بدلا من ذلك
– احسب عدد الأشهر بين التاريخين وقسمها على 12 لتحصل على الفارق سنوات كاملة
– أضف هذا العدد من السنوات إلى تاريخ البدء لإعطاء تاريخ مؤقت لتسهيل الحياة
– حساب عدد الأيام بين التاريخ المؤقت الجديد وتاريخ إلى. قم بتقسيم هذا العدد من الأيام على 30.5 لمعرفة عدد الأشهر الكاملة بين التواريخ.
– أضف هذا العدد من الأشهر إلى التاريخ المؤقت
– حساب عدد الأيام بين التاريخ المؤقت (الجديد) و”إلى التاريخ”.

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

لهذه البيانات الاختبار

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2023-08-19';

سوف تحصل على سنتين وشهر واحد و27 يومًا ولبيانات الاختبار هذه

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2024-08-19';

سوف تحصل على 3 سنوات و1 شهر 27 أيام

الحل 1

-- this gives you 23
select@days=datepart(d,@currentdatetime)

-- this gives you 22
datepart(d,@dateofbirth) 

23 – 22 = 1

الحل 2

الأشهر والأيام بين تاريخين – بحث جوجل[^]. استغرق 5 ثواني للعثور عليه.

الحل 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..!!!

الحل 6

هذا يعمل بالنسبة لي…

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をコピーしました