السلام عليكم
اردت عمل برنامج صغير جدا وهو اني اعطي البرنامج تاريخين من تاريخ ( ) الى تاريخ ( )
وهو يقوم بحساب كم جمعه في هذين التاريخين؟
الله يعطيكم العافيه
السلام عليكم
اردت عمل برنامج صغير جدا وهو اني اعطي البرنامج تاريخين من تاريخ ( ) الى تاريخ ( )
وهو يقوم بحساب كم جمعه في هذين التاريخين؟
الله يعطيكم العافيه
اخى العزيز
السلام عليكم و رحمة الله و بركاتة
هذا الكود يفى الغرض ان شاء الله
CREATE OR REPLACE FUNCTION FRIDAYS(DATE1 DATE, DATE2 DATE) RETURN NUMBER IS vTemp NUMBER:=0; vRet NUMBER:=0; vDate DATE; BEGIN vDate := DATE1; WHILE vDate<= DATE2 LOOP SELECT COUNT(1) INTO vTemp FROM DUAL WHERE TO_CHAR(vDate,'D') = '7'; vRet := vRet + NVL(vTemp,0); vDate := vDate +1; END LOOP; RETURN vRet; END; /
اسألك الدعاء
أو هكذا:
يمكنك طرح التاريخين من بعضهما لإيجاد الفرق بالأيام، ثم القسمة على 7 لمعرفة كم أسبوع بينهما.
SELECT (date2 - date1) AS days FROM DUAL;
واقسم الناتج على سبعة في تطبيقك (خذ الجزء الصحيح من الكسر).
لكن هذا لن ينفع إذا كنت مهتما بعدد (أيام الجمعة) تحديدا، ففي حالة تاريخين مثل الثلاثاء، والأحد الذي يليه، ستحصل على نتيجة صفر (لم يكتمل بينهما الأسبوع) رغم أن هناك جمعة.
الحل، هكذا:
SELECT (NEXT_DAY(date2, 'FRIDAY') - date1) AS days FROM DUAL;
واقسم الناتج على سبعة (تحتاج الجزء الصحيح من الكسر). هذا سيعطيك ناتجا صحيحا لعدد أيام الجمعة بين أي تاريخين.
أرجو من الأخ egyhamada توضيح أمر بالfunction اللي كتبه
select count(1) into vTemp from dual
count(1) is it means the number of times the loop is run or what?
و بالنسبه لجملة الwhere
where to_char(vDate,'D') = '7';
لم أفهمها أرجو التوضيح
آسف على المداخله
و شكرا
السلام عليكم و رحمة الله
اخى الحبيب
المقصود من الجملة
SELECT COUNT(1) INTO vTemp FROM DUAL WHERE TO_CHAR(vDate,'D') = '7';
هو التاكد من ان التاريخ = يوم جمعة و لا لاء و الرقم 7 هو ترتيب يوم الجمعة فى ايام الاسبوع و يمكنك التاكد من ذلك بتنفيذ الجملة التالية
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;
سوف يعيد لك ترتيب اليوم اللى انت فية بالنسبة لايام الاسبوع
ارجو ان تكون وضحت فكرتى و انا مستعد للرد على اى استفسار اخر
و السلام عليكم و رحمة الله
هذا الموضوع مغلق.