بتاريخ: 18 فبراير 200818 سنة comment_122635 السلام عليكم ورحمة الله وبركاته. سبق وأن طلب أحد الأخوه فانكشن لحساب عدد الأيام بين تاريخين مخصوما منهم أيام العطلات الأسبوعيه، بمعنى أنه عندما أقوم بحساب الفرق بين الخامس عشر من فبراير لهذا العام والأول منه فإن النتيجه تكون عشرة أيام وليست خمسة عشر يوما لأنه هناك بين هاذين التاريخين خمسة أيام عطله أسبوعيه(الجمعه والسبت حسب نظام العطلات المصري)والحمد لله قمت بعملها وإختبارهاولكن قبل أن يتم تنفيذ هذه الوظيفه لابد من تغيير الباراميتر الخاص بلغة التاريخ إلي الإنجليزيه وليست العربيه لأن لغة التاريخ العربي لا تظهر النتيجه بشكل صحيح. وتغيير الباراميتر هو كالآتي alter session set nls_date_language='English'; وهذا هو كود هذه الفانكشن: CREATE OR REPLACE FUNCTION WORK_DAYS(START_DATE in date,END_DATE in date) RETURN number IS the_day VARCHAR2(15); counter NUMBER:=0; final_total NUMBER; total NUMBER; for_counter NUMBER; BEGIN SELECT to_date(END_DATE,'dd-mm-yyyy')- to_date(START_DATE ,'dd-mm-yyyy')+1 INTO total FROM dual; for_counter:=total; LOOP SELECT to_char(START_DATE+counter,'day') into the_day from dual; if upper(the_day) like upper('%friday%') or upper(the_day) like upper('%saturday%') then final_total:=total -1; total :=final_total; end if; counter:=counter+1; exit when counter=for_counter; end loop; return final_total; end; / وهذا المثال لتوضيح الفكره : select work_days('1/2/2008','15/2/2008') "The Total" from dual; لاحظ أن التاريخ في الباراميتر الأول للفانكشن يكون التاريخ الأصغر والتاريخ الثاني يكون الأكبر وذلك حتى تتم العمليه بنجاح. ويستطيع أي أحد أن يغير بالفانكشن وذلك حسب أيام الأجازات الأسبوعيه لنظام بلده.أتمنى أن تكون فكرة الفانكشن قد وضحت تقديم بلاغ
بتاريخ: 18 فبراير 200818 سنة comment_122658 وعليكم السلام ورحمة الله وبركاتهما شاء الله لا قوة الا باللهجزاك الله خير وبارك فيك تقديم بلاغ
بتاريخ: 18 فبراير 200818 سنة كاتب الموضوع comment_122696 أشكركم جميعا على كلماتكم الطيبه وأتمنى دوام التوفيق لهذا المنتدى مثلي مثل الجميع هنا. تقديم بلاغ
بتاريخ: 4 ديسمبر 200916 سنة comment_178269 السلام عليكم ورحمة الله وبركاته. سبق وأن طلب أحد الأخوه فانكشن لحساب عدد الأيام بين تاريخين مخصوما منهم أيام العطلات الأسبوعيه، بمعنى أنه عندما أقوم بحساب الفرق بين الخامس عشر من فبراير لهذا العام والأول منه فإن النتيجه تكون عشرة أيام وليست خمسة عشر يوما لأنه هناك بين هاذين التاريخين خمسة أيام عطله أسبوعيه(الجمعه والسبت حسب نظام العطلات المصري)والحمد لله قمت بعملها وإختبارهاولكن قبل أن يتم تنفيذ هذه الوظيفه لابد من تغيير الباراميتر الخاص بلغة التاريخ إلي الإنجليزيه وليست العربيه لأن لغة التاريخ العربي لا تظهر النتيجه بشكل صحيح. وتغيير الباراميتر هو كالآتيalter session set nls_date_language='English'; وهذا هو كود هذه الفانكشن: CREATE OR REPLACE FUNCTION WORK_DAYS(START_DATE in date,END_DATE in date) RETURN number IS the_day VARCHAR2(15); counter NUMBER:=0; final_total NUMBER; total NUMBER; for_counter NUMBER; BEGIN SELECT to_date(END_DATE,'dd-mm-yyyy')- to_date(START_DATE ,'dd-mm-yyyy')+1 INTO total FROM dual; for_counter:=total; LOOP SELECT to_char(START_DATE+counter,'day') into the_day from dual; if upper(the_day) like upper('%friday%') or upper(the_day) like upper('%saturday%') then final_total:=total -1; total :=final_total; end if; counter:=counter+1; exit when counter=for_counter; end loop; return final_total; end; / وهذا المثال لتوضيح الفكره : select work_days('1/2/2008','15/2/2008') "The Total" from dual; لاحظ أن التاريخ في الباراميتر الأول للفانكشن يكون التاريخ الأصغر والتاريخ الثاني يكون الأكبر وذلك حتى تتم العمليه بنجاح. ويستطيع أي أحد أن يغير بالفانكشن وذلك حسب أيام الأجازات الأسبوعيه لنظام بلده.أتمنى أن تكون فكرة الفانكشن قد وضحت أخي الفاضل جزاك الله خيرا ولكنفضلا مراجعة هذه الدالة حيث انها لا تعمل بصورة صحيحة مع الشهور إذا كانت 31 يوم . وشكرا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.