الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد عند حساب الفرق بين تاريخين ان أحصل على التاريخ كاملا" و ليس عدد الأيام فقط

بدأه بهاء صلاح الدين في 8 مارس 2010 · 12 رد · 3,606 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته....

انا اعرف أن الدالة datediff ترجع لنا الفرق بين تاريخين.. مثلا":

 select datediff(dd,'03/08/2010','03/12/2010') as dd

و سيكون الناتج 4 أيام. و لكني أريد الحصول على تواريخ الأربع الأيام يعني :'03/09/2010','03/10/2010','03/11/2010','03/12/2010'

فما هي الطريقة لعمل ذلك؟؟؟؟ أرجو مساعدتكم ضروري

1
#2

هل حاولت لإيجاد حل ام تود حل جاهز و مجرب

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

و الله أنا حاولت و بحثت في موقع msdn عن datetime functions و لم أجد ما يفيد

#4

Let me see if I get this correctly, so if you did this on two dates which are 2 years apart, you need to get something like a table with 730 enteries where each entry is a date?

Let me see if I get this correctly, so if you did this on two dates which are 2 years apart, you need to get something like a table with 730 enteries where each entry is a date?

Mohamed Meshref

Software Design Engineer

SQL Server Team

Microsoft Corporation, Redmond HQ

Phone: +1-(425)704-8684

Mobile: +1-(425)445-7386

Email: mmeshref(at)microsoft(dot)com

#5
اقتباس

Let me see if I get this correctly, so if you did this on two dates which are 2 years apart, you need to get something like a table with 730 enteries where each entry is a date?

السلام عليكم و رحمة الله و بركاته ....

تخمينك صحيح يا أخ محمد، و لكن بالطبع لا أحد يرغب في تواريخ 730 يوم، فقط أريد طريقة لجلب تواريخ 3 أو أربع أيام من خلال sql ، كي لا ألجأ إلى إستعمال أكواد الc# و vb و هي طرق برمجية غير مباشرة قد تكون طويلة

#6

I don't believe that there's something inside SQL Server that does this automatically, so you need to do it manually

Here are the steps:

1- You do what you're doing now to get the difference in days

2- You make a loop that iterates for the same number of days

3- You build a temporarely table of one column of type date

4- For each iteration, you use the DATEADD function to add one day to the initial date and add it to the table

5- you return this table which will have your needs

Mohamed Meshref

Software Design Engineer

SQL Server Team

Microsoft Corporation, Redmond HQ

Phone: +1-(425)704-8684

Mobile: +1-(425)445-7386

Email: mmeshref(at)microsoft(dot)com

#7

شكرا" يا باشمهندس محمد على ردك .... قمت بعمل التكرار بإستخدام while loop ثم إضافة الناتج في جدول مؤقت....

و لكن بما أنك عضو في فريق تطوير sql server إسمح لي بأن اسألك سؤالا"..

هل يمكنكم إنشاء دالة تقوم بإرجاع التواريخ الموجودة بين تاريخين؟و ليس فقط عدد الأيام أو جزء من التاريخ؟

و شكرا" مرة اخرى ....

#8

It's possible if enough people requested it

Mohamed Meshref

Software Design Engineer

SQL Server Team

Microsoft Corporation, Redmond HQ

Phone: +1-(425)704-8684

Mobile: +1-(425)445-7386

Email: mmeshref(at)microsoft(dot)com

#9

السلام عليكم

بامكانك استخدام الكود التالي :

declare @x int;
set @x =datediff(dd,'03/08/2010','03/12/2010');
set rowcount @x;
select   convert(datetime,'03/08/2010',103) + ROW_NUMBER() OVER(order by TableID)-1   from 
 table;
set rowcount 0;

حيث table1 هو اي جدول في قاعدة البيانات يحتوي على مفتاح اساسي

#10

شكرا" جزيلا" يا استاذ طارق .... بس ياريت تشرح الكود لأني مافهمتهوش

#11

السلام عليكم

الكود بسيط

الخطوة الاولى

declare @x int;

set @x =datediff(dd,'03/08/2010','03/12/2010');

نحسب الفرق في عدد الايام بين التاريخين ونضعها في @X

الخطوة الثانية

set rowcount @x;

نرجع عدد صفوف حسب الفرق بين التاريخين

بدون هذه الخطوة سترجع صفوف بعدد الصفوف في الجدول المستخدم في الخطوة الثالثة

الخطوة الثالثة

نستخدم اي جدول في قاعدة البيانات ويحتوي على بيانات ونستخدم الدالة ROW_NUMBER() التي ترجع رقم الصف ونبدأ باضافة هذه الدالة الى تاريخ البداية لنحصل على التواريخ

مثلا لو استخدمت قاعدة البيانات AdventureWorks من الممكن استخدام الجدول Product والحقل ProductID لنحصل على التواريخ

فيصبح الاستعلام كمايلي

declare @x int;
set @x =datediff(dd, convert(datetime,'03/08/2010',103), convert(datetime,'07/08/2010',103));
set rowcount @x;
select   convert(datetime,'03/08/2010',103) + ROW_NUMBER() OVER(order by ProductID)-1   from 
 Production.Product;
set rowcount 0;

وارجو الانتباه الى اضافة convert(datetime,'03/08/2010',103) وهي لنتأكد لتحويل التاريخ حسب التاريخ العربي

وارجو ان اكون اوضحت المطلوب

1
#12

شكرا" يا طارق ... و معذرة على التأخير في الشكر

تم تعديل هذه المشاركة بواسطة بهاء صلاح الدين فراج في 25 مارس 2010 في 20:23

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…