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

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


rudwan

Recommended Posts

السلام عليكم
لدي قاعدة بيانات تاريخها منسق على الميلادي و لا استطيع تحويله الى هجري لأن كل البيانات فيه على الميلادي .
الآن أريد عمل مشروع آخر على نفس القاعدة و بمستخدم مختلف , عباره عن ادخال فواتير لها قيمة و تاريخ , التاريخ يجب أن يكون بالهجري لأنني أريد متابعة و رقابة هذه الفواتير بناء على تاريخها الهجري .
لذلك أريد أن يكون تنسيق حقل التاريخ بالهجري
و لكن أريد بعد ذلك أن يتم تحويل قيمة هذا الحقل ( اي التاريخ الهجري ) الى تاريخ ميلادي
لأنني اريد توزيع قيمة المبالغ المدفوعه بناء على تاريخها الميلادي و ذلك لأغراض الميزانيه
فهل أجد حلا لديكم

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

the following should help you convert into hijri during the migration process .

select
to_char (sysdate,'dd mm yyyy', 'nls_calendar =''arabic hijrah''')
into
b
from
dual ;

run a search on this forum to find all hijri topics

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

السلام عليكم ورحمة الله وبركاته
هل هذه الطريقة تصلح مع الفورمز على سبيل المثال لدينا تاريخ هجري على الشاشة هل يمكن عرض المقابل له بالميلادي والعكس دون ان نتعامل مع sysdate

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

السلام عليكم
الكود الذي وضعته يمكن أن يحول من ميلادي الى هجري
لكن الذي أريده هو أن أتعامل مع التاريخ الهجري بشكل أصولي , اي أريد معرفة التاريخ
الميلادي المقابل للتاريخ الهجري الذي أدخلته , و ذلك بدون أن أغير التاريخ الأساسي في
قاعدة البيانات

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

جرب بناء هذا البكج وادعيلي ونادي فقط على اول بروسيجر والباقي يتولاها البكج ( عمايل اديا وحياة عنيا )


CREATE OR REPLACE PACKAGE DATE_CONVERTER IS
PROCEDURE HDATE_YEAR (H_DATE IN VARCHAR2,H_YEAR OUT NUMBER);
PROCEDURE HDATE_MONTH (H_DATE IN VARCHAR2,H_MONTH OUT NUMBER);
PROCEDURE HDATE_DAY (H_DATE IN VARCHAR2,H_DAY OUT NUMBER);
PROCEDURE HDATE_TO_GDATE (H_DATE IN VARCHAR2,G_DATE OUT DATE);
END;

CREATE OR REPLACE PACKAGE BODY DATE_CONVERTER IS
/******************** PROCEDURE HDATE_YEAR **********************************/
PROCEDURE HDATE_YEAR (H_DATE IN VARCHAR2,H_YEAR OUT NUMBER) IS
BEGIN SELECT TO_NUMBER(DECODE(LENGTH(DECODE(LENGTH(SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, 
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1,
4)),1, '0'||SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1))+1, 4), 
SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4))), 
4, DECODE(LENGTH(SUBSTR(H_DATE,
DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0,INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1),
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4)),
1, '0'||SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1))+1, 4), 
SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4)), 
2, DECODE(LENGTH(SUBSTR(H_DATE, 1,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1)), 1, 
'0'||SUBSTR(H_DATE, 1,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1), 
2, SUBSTR(H_DATE, 1,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1), 
SUBSTR(H_DATE, 1,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1)), 
DECODE(LENGTH(SUBSTR(H_DATE,
DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0,INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1),
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4)),
1, '0'||SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1))+1, 4), 
SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'),0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'),0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'),0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 
4)))) INTO H_YEAR FROM DUAL; END;
/******************** PROCEDURE HDATE_MONTH **********************************/
PROCEDURE HDATE_MONTH (H_DATE IN VARCHAR2,H_MONTH OUT NUMBER) IS
MONTH_NAME VARCHAR2(20);
BEGIN SELECT DECODE(LENGTH(SUBSTR(H_DATE,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1,
(DECODE(INSTR(H_DATE, '/',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))-DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/')))-1)), 
1, '0'||SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1, 
(DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))-DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/')))-1), 
2, SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1, 
(DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1))-DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/')))-1),
SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1,
(DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1),
0,INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1),
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),INSTR(H_DATE, '/'))+1))-
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/')))-1)) INTO MONTH_NAME FROM DUAL; IF LENGTH(MONTH_NAME)>2 THEN
SELECT TO_NUMBER(DECODE(MONTH_NAME
,'محرم',1
,'صفر',2
,'ربيع الأول',3
,'ربيع الثاني',4
,'جمادى الأولى',5
,'جمادى الثانية',6
,'رجب',7
,'شعبان',8
,'رمضان',9
,'شوال',10
,'ذو القعدة',11
,'ذو الحجة',11,0))INTO H_MONTH FROM DUAL; ELSE
H_MONTH:=TO_NUMBER(MONTH_NAME);
END IF;
END;
/******************** PROCEDURE HDATE_DAY **********************************/
PROCEDURE HDATE_DAY (H_DATE IN VARCHAR2,H_DAY OUT NUMBER)IS
BEGIN SELECT 
DECODE(LENGTH(DECODE(LENGTH(SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0,INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1)),
1,'0'||SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'),0,INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1),
2,SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1),
SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1))),
2,DECODE(LENGTH(SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))-1)), 1, 
'0'||SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'),0,INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))-1), 
2, SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'),0,INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))-1), 
SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))-1)), 
4, DECODE(LENGTH(SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'),
INSTR(H_DATE, '/'))+1))+1, 4)), 
1, '0'||SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'),0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/', DECODE(INSTR(H_DATE, '/'), 0,
INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4), 
SUBSTR(H_DATE, DECODE(INSTR(H_DATE, '/',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
0, INSTR(H_DATE, '-',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1), 
INSTR(H_DATE, '/',
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))+1))+1, 4)),
DECODE(LENGTH(SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1)), 1, 
'0'||SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1), 
2,SUBSTR(H_DATE, 1, DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1), 
SUBSTR(H_DATE,1,
DECODE(INSTR(H_DATE, '/'), 0, INSTR(H_DATE, '-'), INSTR(H_DATE, '/'))-1))) INTO H_DAY FROM DUAL; END;
/******************** PROCEDURE HDATE_TO_GDATE **********************************/
PROCEDURE HDATE_TO_GDATE (H_DATE IN VARCHAR2,G_DATE OUT DATE) IS
H_DAY NUMBER(2);
H_MONTH NUMBER(2);
H_YEAR NUMBER(4);
I_LOOP NUMBER:=0;
HY NUMBER;
FGDATE DATE;
begin FGDATE:=TO_DATE('14-JUL-0622','DD-MON-YYYY');

HDATE_DAY(H_DATE,H_DAY);
HDATE_MONTH(H_DATE,H_MONTH);
HDATE_YEAR(H_DATE,H_YEAR);

H_YEAR:=H_YEAR-1;
H_MONTH:=H_MONTH-1;

FOR I IN 1..H_YEAR LOOP
HY:=TRUNC(I/30)*30;
IF (I-HY) IN (2,5,7,10,13,16,18,21,24,26,29) THEN
I_LOOP:=I_LOOP+355;
ELSE
I_LOOP:=I_LOOP+354;
END IF;
END LOOP; 

FOR J IN 1..H_MONTH LOOP 
IF J IN (1,3,5,7,9,11) THEN
I_LOOP:=I_LOOP+30;
END IF;
IF J IN(2,4,6,8,10) THEN
I_LOOP:=I_LOOP+29;
END IF;
HY:=TRUNC(H_YEAR/30)*30;
IF J=12 AND (H_YEAR-HY) IN (2,5,7,10,13,16,18,21,24,26,29) THEN
I_LOOP:=I_LOOP+30;
ELSIF J=12 AND (H_YEAR-HY) NOT IN (2,5,7,10,13,16,18,21,24,26,29) THEN
I_LOOP:=I_LOOP+29;
END IF;
END LOOP;

I_LOOP:=I_LOOP+H_DAY;

FGDATE:=FGDATE+I_LOOP;
G_DATE:=TO_DATE(TO_CHAR(FGDATE,'DD-MON-YYYY'),'DD-MON-YYYY');
END;

END;

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

بارك الله فيك أخي الكريم
رح ادعيلك من كل قلبي
لكن ارجو التكرم بشرح مايلي :
ما هو تنسيق الحقل H_DATE ؟ هل هو varchar2 ?
اذا كان كذلك فان مشكلتي ستنحل باذن الله
و ذاا كان تنسيقه تاريخ هذا معناه أنني يجب أن لغير تنسيق التاريخ في قاعدة البيانات عندي من ميلادي الى هجري , و هذا شي مستحيل لأن كل البرامج المبنيه على هذه القاعده تعمل بالميلادي

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

الأخ ash_khalaf
السلام عليكم ورحمة الله وبركاته
أشكرك شكرا جزيلا على الباكج المرفق ولكن لاحظت أن اول بروسيدر فيه لعرض السنة ، ارجو وضع مثال لتنفيذ الباكج في الفورم

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

السلام عليكم ورحمة الله وبركاته
الحمد لله استخدمت الباكج ولكن في SQL وجاري استخدامه في ال Form وجزاك الله خيرا ، استخدمت البروسيدر الثالث في الباكج

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

  • بعد 2 سنة...
  • بعد 2 سنة...

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

select
to_char (sysdate,'dd/mm/yyyy', 'nls_calendar =''arabic hijrah''')
from
dual ;


select
to_char(sysdate,'dd/mm/yyyy', 'nls_calendar =''Gregorian''')
from
dual ;

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

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

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

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

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

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

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

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