التاريخ الهجري و الميلادي في اوراكل Gregorian & Hijri date in Oracle

السلام عليكم و رحمة الله 
هذه اول مواضيعي في مجموعة مستخدمي اوراكل العرب araboug اسال الله تعالى ان ينفعني و اياكم بها.

لا يخفى على احد اهمية استخدام التاريخ الهجري و لا يمكن الاعتماد كليه على معادلات اوراكل مثل :
-- لتحويل تاريخ اليوم الميلادي الى هجري  نستخدم
select to_char(sysdate,'dd/mm/yyyy','nls_calendar =''arabic hijrah''') from dual
حيث نجد اختلاف يوم او يومين فمثلا يوم 13 صفر 1437 
عند تحويله باستخدام المعادلة السابقة فالناتج يكون :
12/02/1438

و لكن الصحيح ان التاريخ الهجري المقابل للتاريخ الميلادي 13/11/2016 هو13/02/1438.

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

 الطريقة التي اعتمدت عليها :

 #  انشاء جدول 
Create table Ar_convert_date (convert_id number , Hj_date    varchar2(10) , G_date varchar2(10))

# عمل شيت اكسيل بنفس شكل الجدول و يبدا التاريخ الميلادي من 01/01/2015 و حتى 01/01/2050
# تحت Hj_date في الاكسيل نكتب معادلة تحويل الهجري و هي:
=text(G_date,"b2dd/mm/yyyy")
# في عمود جديد في الاكسيل نكتب معادلة التاريخ الميلاد و تكون :
=text(G_date,"dd/mm/yyyy")

#بعد ذلك نقوم بنسخ الثلاثة اعمدة : Convert_id , Hj_date , العمود الاخيرالرابع

# لصق القيم فقط Paste Values في شيت جديد

# بعد هذا يمكن استيراد البيانات مباشرة الى اوراكل باستخدام الTOAD و ان كنت افضل الاستيراد باستخدام جملة INSERT

# طبعا لن ارهقكم في كتابة جملة INSERT  عدد 12866 مرة و هذا مستحيل

# نقوم بكتابة جملة INSERT في الاكسيل كما هو مرفق ثم عمل نسخ و لصق للقيم فقط Paste Values 

#نسخ جملة INSERT الى متصفح Browser من خلال الدخول الى 
كما هو معروف و عمل Execute
و بهذا تم ادراج جميع التواريخ الميلادي (01/01/2015 حتى 01/01/2050) و الهجري (11/03/136 - 08/04/1472) في الفترة المحددة .


#الخطوة التالية تكون عمل Function او Procedure

باقي الملفات في الرابط التالي بسب ان حجمها تجاوز ال 1 ميجا.

No comments: