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

بتاريخ:

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

تم تعديل بواسطة 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 وجزاك الله خيرا ، استخدمت البروسيدر الثالث في الباكج

بتاريخ:

معذرة أقصد استخدمت البروسيدر الرابع

بتاريخ:

مرة أخرى جزاكم الله خيرا ، الحمد لله استخدمت الباكج في الفورمز

بتاريخ:

الاخ رضوان يجب استخدام البروسيجر الرابع HDATE_TO_GDATE
وتنسيق التاريخ VARCHAR2
وباسي شكل DD-MM-YYYY
OR DD/MM/YYYY

  • بعد 2 سنة...
بتاريخ:

من فضللك يااخى كيف استخدم الباكيج فى الفورم و SQLعلما بانى اريد تحويل التاريخ فى الداتا بيز
لتظهر فى الفرم من هجرى الى ميلادى
وشكرا

  • بعد 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 ;

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

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

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

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

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

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.