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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


14 رد (ردود) على هذا الموضوع

#1 KIRK_HAMMETT

KIRK_HAMMETT

    عضو نشط

  • الأعضــاء
  • 219 مشاركة

تاريخ المشاركة 16 December 2005 - 03:26 PM

اريد ان اكتب دالة تقوم بحسام كم عدد يوم جمعة بين تاريخين 9-4-1983 و 17-12-2005 اى ان الدالة تقوم بايجاد كم يوم جمعة بين التاريخين؟؟
وشكرا
Every Day For Us SomeThing New

#2 محمد فيصل امين خربط

محمد فيصل امين خربط

    عضو

  • الأعضــاء
  • 28 مشاركة

تاريخ المشاركة 17 December 2005 - 03:16 PM

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;


#3 محمد فيصل امين خربط

محمد فيصل امين خربط

    عضو

  • الأعضــاء
  • 28 مشاركة

تاريخ المشاركة 17 December 2005 - 04:34 PM

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


#4 محمد فيصل امين خربط

محمد فيصل امين خربط

    عضو

  • الأعضــاء
  • 28 مشاركة

تاريخ المشاركة 17 December 2005 - 04:35 PM

الجواب ليس 1149 ولكن function صحيح

#5 omar-alreyati

omar-alreyati

    عضو مميز

  • الأعضــاء
  • 596 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 18 December 2005 - 09:06 AM

هل من الممكن توضيح شرح function


وشكراً

بالله عليكم لا تنسوني من دعاءكم الصالح
لا تنسوا أهل غزة والعراق والمجاهدين من دعاءكم

#6 Giggs

Giggs

    عضو

  • الأعضــاء
  • 20 مشاركة
  • الاسم الأول:Mohammed
  • اسم العائلة:Elayyan
  • البـلـد: Country Flag

تاريخ المشاركة 18 December 2005 - 01:40 PM

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

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

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



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



واي سؤال يمكن الاستفسار
mnafith@hotmail.com

#7 ABUSANAD

ABUSANAD

    عضو نشط

  • الأعضــاء
  • 202 مشاركة

تاريخ المشاركة 18 December 2005 - 09:20 PM

السلام عليكم, نستطيع حسابة الاسابيع في الدالة الاتية:-
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 ;
/

&#1579;&#1605; &#1578;&#1603;&#1578;&#1576; &#1575;&#1604;&#1575;&#1605;&#1585; &#1575;&#1604;&#1575;&#1578;&#1610;:-

SQL> SELECT FUNC_FRIDAY FROM DUAL ;

أخوكم المحب
احمد العولقي
OCP Developer 9i

#8 aza

aza

    عضو نشط

  • الأعضــاء
  • 303 مشاركة

تاريخ المشاركة 19 December 2005 - 08:01 AM

شكرا جزيلا على هذه الإفادة

#9 mahmoud afifi

mahmoud afifi

    مشترك

  • الأعضــاء
  • 129 مشاركة

تاريخ المشاركة 17 July 2010 - 01:53 PM

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;

OCP Forms 10g OCA PL/SQL
PowerBuilder Developer
SQL Server Administrator
.NET Developer
CCNA Certified


#10 mahmoud afifi

mahmoud afifi

    مشترك

  • الأعضــاء
  • 129 مشاركة

تاريخ المشاركة 17 July 2010 - 02:11 PM

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;

OCP Forms 10g OCA PL/SQL
PowerBuilder Developer
SQL Server Administrator
.NET Developer
CCNA Certified


#11 m_hassan_k

m_hassan_k

    عضو

  • الأعضــاء
  • 19 مشاركة
  • الاسم الأول:Mohamed
  • اسم العائلة:Hassan
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer & ADF Developer

تاريخ المشاركة 19 July 2010 - 05:23 PM

انا عندي حل إن شاء الله سهل وبسيط جدا وجربته وشغال صح....
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, 19 July 2010 - 05:52 PM.

عن أبي هريرة (رضي الله عنه) قال: قال رسول الله(صلي الله عليه وسلم) : { من قال سبحان الله وبحمده، في يوم مائة مرة، حُطّت له خطاياه، وإن كانت مثل زبد البحر } متفق عليه


#12 أحمد جادو

أحمد جادو

    عضو نشط

  • الأعضــاء
  • 244 مشاركة
  • الاسم الأول:أحمد
  • اسم العائلة:جادو
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer @ Alhasa Municipality

تاريخ المشاركة 19 July 2010 - 06:15 PM

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


- أحمد جادو -
Senior Oracle Developer
Alhasa
Municipality

Alhasa - Saudi Arabia


#13 ahmed sobhy

ahmed sobhy

    عضو

  • الأعضــاء
  • 9 مشاركة
  • الاسم الأول:Ahmed
  • اسم العائلة:Sobhy
  • البـلـد: Country Flag

تاريخ المشاركة 27 September 2010 - 12:00 PM

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


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;



#14 proMido

proMido

    عضو

  • الأعضــاء
  • 7 مشاركة

تاريخ المشاركة 28 September 2010 - 05:07 PM

السلام عليكم

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

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

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


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

#15 عزيز القادري

عزيز القادري

    مشترك

  • الأعضــاء
  • 197 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:الرياضه-الانترنت

تاريخ المشاركة 23 October 2010 - 11:46 AM

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



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

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

صورة