الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

إليكم فانكشن لحساب عدد أيام العمل بين تاريخين مخصوم منهم العطله الأسبوعيه

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته. سبق وأن طلب أحد الأخوه فانكشن لحساب عدد الأيام بين تاريخين مخصوما منهم أيام العطلات الأسبوعيه، بمعنى أنه عندما أقوم بحساب الفرق بين الخامس عشر من فبراير لهذا العام والأول منه فإن النتيجه تكون عشرة أيام وليست خمسة عشر يوما لأنه هناك بين هاذين التاريخين خمسة أيام عطله أسبوعيه(الجمعه والسبت حسب نظام العطلات المصري)والحمد لله قمت بعملها وإختبارها



ولكن قبل أن يتم تنفيذ هذه الوظيفه لابد من تغيير الباراميتر الخاص بلغة التاريخ إلي الإنجليزيه وليست العربيه لأن لغة التاريخ العربي لا تظهر النتيجه بشكل صحيح. وتغيير الباراميتر هو كالآتي

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;



لاحظ أن التاريخ في الباراميتر الأول للفانكشن يكون التاريخ الأصغر والتاريخ الثاني يكون الأكبر وذلك حتى تتم العمليه بنجاح. ويستطيع أي أحد أن يغير بالفانكشن وذلك حسب أيام الأجازات الأسبوعيه لنظام بلده.

أتمنى أن تكون فكرة الفانكشن قد وضحت

بتاريخ:

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

ما شاء الله لا قوة الا بالله

جزاك الله خير وبارك فيك

بتاريخ:

جزاك الله خيرا

بتاريخ:
  • كاتب الموضوع

أشكركم جميعا على كلماتكم الطيبه وأتمنى دوام التوفيق لهذا المنتدى مثلي مثل الجميع هنا.

بتاريخ:

شكرا وجزاك الله خير

  • بعد 5 شهور...
بتاريخ:

أشكرك كل الشكر وجعلة الله في موازين حسناتك

  • بعد 1 سنة...
بتاريخ:
السلام عليكم ورحمة الله وبركاته. سبق وأن طلب أحد الأخوه فانكشن لحساب عدد الأيام بين تاريخين مخصوما منهم أيام العطلات الأسبوعيه، بمعنى أنه عندما أقوم بحساب الفرق بين الخامس عشر من فبراير لهذا العام والأول منه فإن النتيجه تكون عشرة أيام وليست خمسة عشر يوما لأنه هناك بين هاذين التاريخين خمسة أيام عطله أسبوعيه(الجمعه والسبت حسب نظام العطلات المصري)والحمد لله قمت بعملها وإختبارها



ولكن قبل أن يتم تنفيذ هذه الوظيفه لابد من تغيير الباراميتر الخاص بلغة التاريخ إلي الإنجليزيه وليست العربيه لأن لغة التاريخ العربي لا تظهر النتيجه بشكل صحيح. وتغيير الباراميتر هو كالآتي

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 يوم . وشكرا
  • بعد 5 أسابيع...
بتاريخ:

جزاك الله خيرا

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.