الانتقال إلى المحتوى
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

بتاريخ:

اريد ان اكتب دالة تقوم بحسام كم عدد يوم جمعة بين تاريخين 9-4-1983 و 17-12-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; 

بتاريخ:

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

بتاريخ:

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

بتاريخ:

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


وشكراً

بتاريخ:

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

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

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 هو تاريخ تعيين الموظف اي ان الجملة تحدد الفرق بين التاريخ الحالي وتاريخ تعيين الموظف بالقسمة على سبعة ينتج

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

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

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

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

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

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

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.