الانتقال إلى المحتوى

اريد الدالة تقوم بايجاد كم يوم جمعة بين التاريخين؟


KIRK_HAMMETT

Recommended Posts

 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; 

رابط هذا التعليق
شارك

الجواب 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; 

رابط هذا التعليق
شارك

السلام عليكم
هذه اول مشاركة لي في هذا الموقع
ارجو ان تكون مفيدة

الاجابة ببساطة هي :

select trunc(to_number(end_date - next_day(start_date - 1, 'Friday'))/7) + 1 from dual



اما اذا كانت ال DB لديك بالعربي استبدل (Friday) بـ (الجمعة)



واي سؤال يمكن الاستفسار
[email protected]

رابط هذا التعليق
شارك

السلام عليكم, نستطيع حسابة الاسابيع في الدالة الاتية:-

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 ; 

رابط هذا التعليق
شارك

  • بعد 4 سنة...

 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; 

رابط هذا التعليق
شارك

 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; 

رابط هذا التعليق
شارك

انا عندي حل إن شاء الله سهل وبسيط جدا وجربته وشغال صح....

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; 

تم تعديل بواسطة m_hassan_k
رابط هذا التعليق
شارك

جرب هذا الحل البسيط
وعلى فكرة يعطيك نتيجة 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

رابط هذا التعليق
شارك

  • بعد 2 شهور...

السلام عليكم ورحمة الله وبركاته هذا اخى كودبسيط جدا




CREATE OR REPLACE FUNCTION calc_friday (end_date IN DATE, start_date IN DATE)
RETURN NUMBER
IS
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;

رابط هذا التعليق
شارك

السلام عليكم

للحصول على ايام الجمعة بين تاريخين

تستخدم الفانكشن

------------


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

رابط هذا التعليق
شارك

  • بعد 4 أسابيع...

select (sysdate-hire_date)/7 from employees
where employee_id=100;



ح حيث hire_date هو تاريخ تعيين الموظف اي ان الجملة تحدد الفرق بين التاريخ الحالي وتاريخ تعيين الموظف بالقسمة على سبعة ينتج

عددالاسابيع وهو نفسة عدد اسام الجمعة
وتقدر ان تجعل هذا الكود في دالة ترجع رقم

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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