KIRK_HAMMETT بتاريخ: 16 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 16 ديسمبر 2005 اريد ان اكتب دالة تقوم بحسام كم عدد يوم جمعة بين تاريخين 9-4-1983 و 17-12-2005 اى ان الدالة تقوم بايجاد كم يوم جمعة بين التاريخين؟؟وشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد فيصل امين خربط بتاريخ: 17 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 17 ديسمبر 2005 create or replace function friday_number (first_Date in date,second_date in date) return number is number_friday number:=0 ; friday_date date:=first_date; begin while friday_date<second_date loop select next_day(friday_date,6) into friday_Date from dual; number_friday:=number_friday+1; end loop; if friday_date=second_date then return number_friday; else number_friday:=number_friday-1; return number_friday; end if ; end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد فيصل امين خربط بتاريخ: 17 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 17 ديسمبر 2005 الجواب 1149 يوم جمعهبعض التعديلات المهمه على ال function create or replace function friday_number (first_Date in date,second_date in date) return number is number_friday number:=0 ; friday_date date:=first_date; begin while to_date(friday_date,'dd-mm-rr')<to_date(second_date,'dd-mm-rr') loop select next_day(friday_date,6) into friday_Date from dual; --friday_date:=x; number_friday:=number_friday+1; end loop; if friday_date=second_date then return number_friday; else number_friday:=number_friday-1; return number_friday; end if ; end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد فيصل امين خربط بتاريخ: 17 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 17 ديسمبر 2005 الجواب ليس 1149 ولكن function صحيح اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
omar-alreyati بتاريخ: 18 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 18 ديسمبر 2005 هل من الممكن توضيح شرح function وشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Giggs بتاريخ: 18 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 18 ديسمبر 2005 السلام عليكمهذه اول مشاركة لي في هذا الموقعارجو ان تكون مفيدة الاجابة ببساطة هي :select trunc(to_number(end_date - next_day(start_date - 1, 'Friday'))/7) + 1 from dualاما اذا كانت ال DB لديك بالعربي استبدل (Friday) بـ (الجمعة)واي سؤال يمكن الاستفسار [email protected] اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ABUSANAD بتاريخ: 18 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 18 ديسمبر 2005 السلام عليكم, نستطيع حسابة الاسابيع في الدالة الاتية:- CREATE FUNCTION FUNC_FRIDAY IS BEGIN SELECT MONTHS_BTWEEN( '17-DEC-05', '09-APR-83') * 4 -- Multiply by 4 number of weeks per months FROM DUAL ; END ; / ثم تكتب الامر الاتي:- SQL> SELECT FUNC_FRIDAY FROM DUAL ; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
aza بتاريخ: 19 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 19 ديسمبر 2005 شكرا جزيلا على هذه الإفادة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mahmoud afifi بتاريخ: 17 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2010 CREATE OR REPLACE Function HR.FriDayCNT(d1 in date,d2 in date) return number as FridayNO number; DStart Date :=d1; begin FridayNO :=0; while DStart <= d2 loop if trim(to_char(DStart,'day')) = 'friday' then FridayNO :=FridayNO +1; end if; DStart:=DStart+1; end loop ; return FridayNO; end FriDayCNT; / select FriDayCNT(sysdate-180,sysdate) from dual; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mahmoud afifi بتاريخ: 17 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2010 CREATE OR REPLACE Function HR.FriDayCNT2(d1 in date,d2 in date) return number as FridayNO number; DStart Date :=d1; begin FridayNO :=0; if trim(to_char(DStart,'day')) = 'friday' then FridayNO :=FridayNO +1; DStart:=DStart+1; end if; while d2-DStart >=7 loop select next_day(DStart,'friday') into DStart from dual; FridayNO :=FridayNO +1; end loop ; return FridayNO; end FriDayCNT2; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_hassan_k بتاريخ: 19 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 19 يوليو 2010 (معدل) انا عندي حل إن شاء الله سهل وبسيط جدا وجربته وشغال صح.... Create or Replace function calc_date(fromdate date,todate date) return number is date0 date := fromdate; x number :=0; y varchar2(1) :=' '; begin Loop select to_char(date0,'d') into y from dual ; if y = '7' then x := x+1; else x := x; end if; date0 := date0 + 1; exit when date0 > todate; end loop; return x; end; تم تعديل 19 يوليو 2010 بواسطة m_hassan_k اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
أحمد جادو بتاريخ: 19 يوليو 2010 تقديم بلاغ مشاركة بتاريخ: 19 يوليو 2010 جرب هذا الحل البسيطوعلى فكرة يعطيك نتيجة 1183 SELECT COUNT (*) fridays FROM (SELECT DECODE (TO_CHAR (:from_dat + ROWNUM - 1,'Dy','nls_date_language=english'),'Fri', 'Friday') DAY FROM all_objects WHERE ROWNUM < :to_dat - :from_dat) WHERE DAY IS NOT NULL اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmed sobhy بتاريخ: 27 سبتمبر 2010 تقديم بلاغ مشاركة بتاريخ: 27 سبتمبر 2010 السلام عليكم ورحمة الله وبركاته هذا اخى كودبسيط جدا CREATE OR REPLACE FUNCTION calc_friday (end_date IN DATE, start_date IN DATE) RETURN NUMBERIS v NUMBER;BEGIN LOOP SELECT TO_DATE (:end_date, 'dd-mm-yyyy') - TO_DATE (:start_date, 'dd-mm-yyyy') + 1 INTO x FROM DUAL; SELECT TO_CHAR (TO_DATE (:start_date, 'dd-mm-yyyy') + z, 'd') INTO y FROM DUAL; z := z + 1; IF y = 6 THEN v := v + 1; END IF; EXIT WHEN z = x; END LOOP; RETURN v;END; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
proMido بتاريخ: 28 سبتمبر 2010 تقديم بلاغ مشاركة بتاريخ: 28 سبتمبر 2010 السلام عليكم للحصول على ايام الجمعة بين تاريخين تستخدم الفانكشن------------ FUNCTION CLC_FRIDAYS ( p_frm_date date , p_to_date date ) RETURN NUMBER is chk_day date; days_count number := 0 ; begin chk_day := p_frm_date ; loop IF UPPER(TO_CHAR(chk_day,'FMDY')) IN ('FRI','الجمعة') then days_count := days_count + 1 ; end if; exit when chk_day = p_to_date; chk_day := chk_day + 1 ; end loop; return nvl(days_count ,0) ; end; -----------ونقوم باستدعائها كالتالى BEGIN CNT := CLC_FRIDAYS ( TO_DATE('09-04-1983','DD-MM-RRRR') , TO_DATE('17-12-2005','DD-MM-RRRR') ) ; RETURN NVL(CNT,0); end; وتكون النتيجة 1184 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عزيز القادري بتاريخ: 23 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2010 select (sysdate-hire_date)/7 from employeeswhere employee_id=100;ح حيث hire_date هو تاريخ تعيين الموظف اي ان الجملة تحدد الفرق بين التاريخ الحالي وتاريخ تعيين الموظف بالقسمة على سبعة ينتج عددالاسابيع وهو نفسة عدد اسام الجمعة وتقدر ان تجعل هذا الكود في دالة ترجع رقم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.