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

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

صورة
- - - - -

تحويل التاريخ من ميلادي الي هجري


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

#1 سلطان اوراكل

سلطان اوراكل

    عضو

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

تاريخ المشاركة 22 November 2006 - 08:04 AM

السلام عليكم

اخواني انا عندي هذي الكود الذي يقوم بتحويل التاريخ الميلادي الي الهجري
قم بتنفيذ هذا الfunction اولاً ثم 
CREATE OR REPLACE function intPart(floatNum in number)
return number
is
floatNum1 number:=floatNum;
begin
if (floatNum1< -0.0000001) then
return ceil(floatNum1-0.0000001);
end if;
return floor(floatNum1+0.0000001);
end;
/

قم بتنفيذ الfuntionهذا ثانياً
CREATE OR REPLACE function hd_fun(dateh  date)
return
date
is
datea date;
d number(2):=to_char(dateh,'dd');
 m number(2) :=to_char(dateh,'mm');
 y number(4) :=to_char(dateh,'yyyy');
 jd number;
 l number;
 j number;
 n number;
begin
/*if ((y>1582) or ((y=1582)and(m>10))or((y=1582)and(m=10)and(d>14)))
 then
  jd:=intPart((1461*(y+4800+intPart((m-14)/12)))/4)+intPart((367*(m-2-12*(intPart((m-14)/12))))/12)-
  intPart( (3* (intPart(  (y+4900+    intPart( (m-14)/12)     )/100)    )   ) /4)+d-32075;
 else*/
 jd := 367*y-intPart((7*(y+5001+intPart((m-9)/7)))/4)+intPart((275*m)/9)+d+1729765;
l:=jd-1948440+10632;
     n:=intPart((l-1)/10631);
     l:=l-10631*n+354;
     j:=(intPart((10985-l)/5316))*(intPart((50*l)/17719))+(intPart(l/5670))*(intPart((43*l)/15238));
     l:=l-(intPart((30-j)/15))*(intPart((17719*j)/50))-(intPart(j/16))*(intPart((15238*j)/43))+29;
     m:=intPart((24*l)/709);
     d:=l-intPart((709*m)/24);
     y:=30*n+j-30;
if length(d) <2 AND length(M) <2 THEN
datea:=to_date(0||d||0||m||y,'ddmmyyyy');
elsif length(d) <2 then
datea:=to_date(0||d||m||y,'ddmmyyyy');
elsif length(M) <2 THEN
datea:=to_date(d||0||m||y,'ddmmyyyy');
else
datea:=to_date(d||m||y,'ddmmyyyy');
end if;
--end if;
return datea;
end;
/

الان يمكن استخدامه مع اي جملة select 
مثال 

select hd_fun(sysdate)
from dual;

مثال اخرى
select hiredate,hd_fun(hiredate)
from emp;
الي اريد اعمله الحين هو اني اقوم انا بأدخال التاريخ ميلادي وهو يحوله الي هجري

ولكم مني جزيل الشكر

#2 سلطان اوراكل

سلطان اوراكل

    عضو

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

تاريخ المشاركة 22 November 2006 - 08:06 AM

اعتقد هي اني استدعيها في برنامج ناثي
بس ما اعرف الطريقة بصراحة لاني مبتدأ في pl/sql

#3 سلطان اوراكل

سلطان اوراكل

    عضو

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

تاريخ المشاركة 23 November 2006 - 08:20 AM

:) ليش مافي ردود :(

#4 MoHaNnEd

MoHaNnEd

    عضو

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

تاريخ المشاركة 25 November 2006 - 12:04 AM

SQL> select hd_fun(sysdate), sysdate from dual;

HD_FUN(SY SYSDATE
--------- ---------
04-NOV-27 24-NOV-06
لو تقدر تحول كمان الشهور الميلادية الى الهجرية ؟!!
وجزيل الشكر على الكود

#5 سلطان اوراكل

سلطان اوراكل

    عضو

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

تاريخ المشاركة 25 November 2006 - 07:34 AM

اخ MoHaNnEd

مش هذا الي اريد اقوم فيه


SQL> select hd_fun(sysdate), sysdate from dual;

HD_FUN(SY SYSDATE
--------- ---------
04-NOV-27 24-NOV-06



انا الي اريد اقول فيه هو اني انا اقوم بأدخل اي تاريخ وهو يقوم بتحويله عن طريق هذا الكود

ولو هذا وجبنا

#6 developer

developer

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 315 مشاركة
  • الاسم الأول:M
  • اسم العائلة:Almuflehi
  • البـلـد: Country Flag

تاريخ المشاركة 25 November 2006 - 09:18 AM

select hd_fun('25/11/2006')HEJRA, sysdate from dual;

HEJRA    SYSDATE
-------- --------
05/11/27 25/11/06

التاريخ الناتج من الدالة هو
 05/11/27

مع انه من المفترض حسب تقويم ام القرى
 04/11/27

اي يوجد هناك انحراف في التاريخ

اخي الكريم هناك اكثر من مشاركة في المنتدى عن موضوع التحويل من التاريخ الميلادي الى الهجري وهناك شرح لاكثر من طريقة للتحويل..

استخدم خاصية البحث في المنتدى...
...... بالتوفيق ...

#7 سلطان اوراكل

سلطان اوراكل

    عضو

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

تاريخ المشاركة 25 November 2006 - 08:40 PM

اخوي developer

مش هذا قصدي اني اقوم بأدخال التاريخ في جملة select
انا اريد اني ادخل التاريخ عن طريق جملة المتغيرات التعويضية substitution variables