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

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


سلطان اوراكل

Recommended Posts

السلام عليكم

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

قم بتنفيذ هذا ال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;


الي اريد اعمله الحين هو اني اقوم انا بأدخال التاريخ ميلادي وهو يحوله الي هجري

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

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

اخ MoHaNnEd

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


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

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





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

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

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

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



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

05/11/27



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

04/11/27



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

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

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

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

اخوي developer

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

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

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

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

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

×   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.

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

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

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