[ad_1]
مرحبا يا أصدقاء،
أحتاج إلى حساب العدد الإجمالي. من الأشهر والأيام بين تاريخين. لدي مشكلة في هذا الاستعلام الرجاء مساعدتي.
في هذا الاستعلام 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 لمعرفة عدد الأشهر الكاملة بين التواريخ.
– أضف هذا العدد من الأشهر إلى التاريخ المؤقت
– حساب عدد الأيام بين التاريخ المؤقت (الجديد) و”إلى التاريخ”.
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));
لهذه البيانات الاختبار
DECLARE @FromDate DATE = '2021-06-23'; DECLARE @ToDate DATE = '2023-08-19';
سوف تحصل على سنتين وشهر واحد و27 يومًا ولبيانات الاختبار هذه
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
الحل 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..!!!
الحل 6
هذا يعمل بالنسبة لي…
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]
コメント