الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اسهل طريقة لمعرفة الفرق بين تاريخين

بدأه colla2006 في 30 مارس 2009 · 6 رد · 5,453 مشاهدة · في قسم لغة الاستفسارات SQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

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

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

إن كان لديهم الافضل ان يشاركونا فيه

وتقبلو تحيات

colla2006

مع تمنياتنا للجميع بالتوفيق

لا تنسو الردود والدعاء لنا ولكم بصالح الخاتمه

الرباط

http://rapidshare.com/files/215276325/deff...ween_2_date.txt

1
#3

يا شباب 11 واحد دخلو في 10 دقائق بس

يا خي قولو قديمه دوور غيرها

قولو ما هي نافعه

اي شيئ .

شوية تشجيع

#4

طريقة رائعة وذكية ...........

جزاك الله خيرا

#6

هذا الرد مخصوص عشان طلب الاخ الكريم ( ثامر ) ونحنا تحت الخدمه في اي وقت

اول شيئ قمنا بإنشاء جدول إسمه t( اي إسم لا تدقق في موضوع الاسامي )

وفيه عمودين :

العمود الاول سميته end_date وهو من نوع بيانات date حتى نضع فيه بيانات من النوع تاريخ

العمود الثاني سميته start_date وهو من نوع بيانات date حتى نضع فيه بيانات من النوع تاريخ

والمطلوب من الكلام هذا كله اننا ننشئ جدول فيه تاريخين وبعد كذا نقوم بحساب الفرق بين التواريخ التي في هذا الجدول (فقـط) . وهذا المثال يعتبر صوره مبسطه لمشكلة الفرق بين التواريخ او بمعنى آخر يعتبر الاساس لأنك لو فكرت تستخدم هذا الكود في PL\SQL ما عليك غير انك تعدل بعض الاشياء البسيطه فيه وكذل بالنسبه للشباب developer

نرجع لموضوعنا :

إنتهينا من مسألة إنشاء الجدول

create table t ( end_date date, start_date date );

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

الاضافة الاولى :

insert into t values ( '10-FEB-2000', '02-JAN-1999' );

الاضافة الثانية :

insert into t values ( '10-FEB-2000', '02-JAN-1999' );

بعد كذا عندك الاستعلام الي يقوم بعملية الفرق بين التاريخين في كل صف قمنا بإنشائه

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

select months_between( end_date, start_date ),

trunc( months_between( end_date, start_date ) /12 ) Years,

mod( trunc( months_between( end_date, start_date ) ), 12 ) months,

end_date - add_months(start_date,trunc( months_between( end_date,start_date ) )) days

from t;

طيب نشرح السطر الاول

:

select months_between(end_date, start_date)

اول شيئ عندك الدالة months_between وهذه الدالة دورها ان توجد الفرق بين تاريخين بالشهور.

يعني ان الناتج من هذه الدالة هو عبارة عن رقم وليس تاريخ . طيب , من الممكن انو يكون هذا الرقم كسري مثلا 13.654987362 ( اي حاجه لا تدقق في الرقم )

طيب ليش يطلع كسري ؟

ج: هذا الكسر يمثل الوقت ما بين التاريخين . لان اي تاريخ يتم تخزينه في قاعدة البيانات يتم تخزين الوقت معاه. وبالتالي إذا كان التاريخ الاول والثاني تم تخزينهم في نفس الوقت فلن يكون الناتج من هذه العملية كسري . وهذا شيئ (((شبه))) مستحييييييييييييييييييييييل

طيب نروح للسطر الي بعده :

trunc( months_between( end_date, start_date ) /12 ) Years

هذا السطر يقوم بإيجاد فرق السنين بين التاريخين . كيف؟

طيب , عندك الدالة الي جوه months_between( end_date, start_date )

الناتج منها نقسمه على 12 . ليه ، عشان نستخرج كم سنه موجوده في هذا الرقم والسنه فيها 12 شهر . بعد كذا عندك الدالة trunc هذه الدالة حلوه جدا دورها انها تشيل الغبار اللي بعد الفاصلة ( يعني الكسر) وكذا يكون طلعلنا رقم صحيح نقدر نقول عليه هذا فرق السنين .

السطر الي بعدو :

mod( trunc( months_between( end_date, start_date ) ), 12 ) months

هذا السطر مهمته يستخرج فرق الشهور بين التاريخين. المره هذه . إزااااااااااايييييي ؟

أعتقد ان السطر هذا صار مفهوم :

( trunc( months_between( end_date, start_date ) ), 12 )

نجي للكلمة البره كلها ثلاثه حروف بس عجيبه وانا اخوك (mod)

نجي للكلمة البره كلها ثلاثه حروف بس عجيبه وانا اخوك (mod)

وهذه الدالة دورها انها ترجع ناتج باقي القسمه على 12 . طيب ليش 12 لان 12 يمثل عدد الشهور في السنة . وكذا يكون طلعلنا فرق عدد الشهور بين التاريخين.

نروح للسطر الاخير :

end_date - add_months(start_date,trunc( months_between( end_date,start_date ) )) days

هذا السطر فيه مليون حاجه :

1-

trunc( months_between( end_date,start_date ) )

ما اعتقد ان فيه شيئ وحتى ولو فيه قولي وانا اشاء الله اعيد شرحه مره ثانية باسلو ثاني هو واي واحد غيره .

2 –

add_months(start_date,trunc( months_between( end_date,start_date ) ))

ما هو الشيئ الجديد في هذا السطر هو العبارة add_months

إيش دورها :

دورها انها تقوم بإضافه عدد من الاشهر إلى تاريخ محدد . انظر الصيغة العامة :

add_months( date , num)

حيث ان :

date : هو التاريخ المحدد

num : هو الرقم الذي سيضاف إلى خانة الشهور (يعني التاريخ)

بالنسبة للمثال حقنا :

date : هو start_date

num : trunc( months_between( end_date,start_date ) ))

لماذا قمت برأيك بهذه العملية الحاسبيه ؟

لاننا عندما نضيف فرق الاشهر إلى start_date سوف نجد نفسنا مباشرتاَ داخل

شهر end_date ولكن اليوم مازال كما هو . يوم 2

لاحظ :

months_between( end_date,start_date ) = 13.2580645

trunc( months_between( end_date,start_date )) = 13

add_months(start_date,trunc( months_between( end_date,start_date ) )) = 02-FEB-2000

وبالتالي سوف يكون شكل الاشهر في هذه المرحلة بالشكل التالي :

end _date start_date

10-FEB-2000 02-FEB-2000

الخطوة التي تليها

end_date - start_date = 8

ما معنى هذا الكلام :

من المعلوم لدي انه عندما اقوم بعمليت طرح عاديه ما بين تاريخين فإن عملية الطرح تتم على الايام فقط ولا تتم على الاشهر والسنين

ارجو من الله العلي القدير ان نكون قد وفقنا في توضيح هذا المثال كما اسأل الله ان يجعل

فيه الخير والبركه لمنفعه شباب المسلمين . فيا أخي ثامر كل المسأ عبارة عن فهم جيد

لكلمة (((( برمجه )))) وهي لا تأتي بين ليله وضحاها فهي تحتاج منك ان تحاول حل

الكثير من الامثلة والسهر عليها وليس حل المثال فقط هو حل المشكلة بل بعد الحل تحاول

ان تجد له حل آخر وآخر لان البرمجه هي عبارة عن تطبيق لمفهوم معين وآخر شيئ انك

تحاول ان تصل إلى الحل الامثل .

#7

أولا: أخي أنا فهمتها من الأول.

ثانيا :أخي يوجد الكثير من الأخوان اللي يريدو أن يكون الشئ سهل لكي يتعلمه .كما سهلته في ردك ... سهل الله لك أمورك

ثالثا وهذا اللي أهم:

اللهم أجعل له في كل حرف حسنة و الحسنة عشر أمثالها

اللهم آمين

مواضيع مشابهة