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

مشكلة في مقارنة التواريخ وحلها


هانى سند

Recommended Posts

السلام عليكم
دي اول مشكلة ابعتها تطبيقا للفكرة اللي قلت لكوا عليها
هي المشكلة اللي حصلت معايا و شفتها في حاجات كتير
هي عند المقارنة بين تاريخين as charcter
عشان محتاجين نقارن بالشهر بس
في فورمات mm-yyyy
المشكلة ان الاوراكل عند المقارنة as charcter
ممكن يعتبر حاجات اكبر من حاجات تانية
مع انهم كديت موش كدة يعني
مثلا ممكن 10-2003 تبقي اصغر من 07-2003ككاركتر
مع انه كديت العكس طبعا
طيب دي المشكلة حلها ايه بقي
اننا نحول التاريخ لكاركتر و بعد كدة لديت عشان يقارن صح يعني
نكتب كدة

and  to_date(to_char(date1,'mm-yyyy'),'mm-yyyy')<to_date(to_char('07-2003','mm-yyyy'),'mm-yyyy');


كدة يقارنهم ك date مش charcter
و النتايج تطلع صح
بالتوفيق و منتظر مشاركاتكم

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

مشكور hanon_OCP
علي مشاركتك القيمة
وعندي اضافة ايضا علي موضوع التاريخ
غالبا في الايصالات او المستندات ذا الصبغة الماليه ما نقوم بتخزين ال SYSDATE لمعرفة تاريخ الاصدر
و عند السيرش عن الايصالات المصدر في تاريخ معين تحدث مشكله وهي
ان التاريخ يخزن بصيغة كامله بما في ذلك الدقائق و الثواني
اما عند البحث ندخله علي شكل يوم شهر سنه وفي هذه الحالة يعتبرنا في الساعه هي الساعة 1 اي منتصف اليل
و بذلك يفشل البحث
الحل ان تقوم بعمل TRUNC للعمود المحتوي علي تاريخ

SELECT * FROM EMP WHERE TRUNK(HIRDATE) ='24/10/1990' ;


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

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

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

select  hiredate  from emp where to_char(hiredate,'mmyyyy') >
(select   to_char(hiredate,'mmyyyy') from emp where empno =7788);


و ده نفس الكويري بالنتايج الصح

select  hiredate  from emp where to_date(to_char(hiredate,'mmyyyy'),'mmyyyy')>
(select  to_date( to_char(hiredate,'mmyyyy'),'mmyyyy') from emp where empno =7788);

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

يا شباب .... ليش متعبين حالكو ... بتقدروا تقارنو التواريخ كما هي بدون تحويل الى احرف من خلال استخدام الدالة(ة truncate(date,format والي بيتمكنكو من قطع الاجزاء التي ما بدكوا تقرنوها ....

هذا المثال بيقارن بين تاريخين بغض النظر عن الوقت المسجل ضمن التاريخ

select anyColums from anyTable where truncate(date1,'day') =
truncate(date2,'day')


SammerJo - Jordan University

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

اخي العزيز sammerjo السلام عليكم
اولا الوظيفة اسمها trunc وليس truncate
ثانيا انا نفذت نفس الكويري اللي بعته بطريقتك ولكن للاسف اعطاني نتيجة مختلفة و لكن يمكن تعديله
في حالة هذا الكويري بالذات حتي يعطي النتيجة الصح
ايضا يجب ان تعرف انني هنا لا اطرح طريقة لشيء انا فقط اشارككم مشكلة حدثت لي و كيف حلتها
بناء علي الاقتراح الذي تقدمت به و الذي ستجد ه في قسم الاقتراحات
و هذا هو الكويري اللي بعته بس بطريقتك

select  empno,trunc(hiredate,'day') d1   from emp where trunc  (hiredate)  >(select  trunc(hiredate,'day') from emp where empno  =7788)


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

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

سلام شباب ... ومشكور اخ hanon_OCP على التصحيح. وارجو ان تعذرني وشباب لأني اتصفح الموقع بين المحاضرات داخل المختبر لاني ما عندي إشتراك في البيت. عموما علشان ما يسسير اي خربطة للقارئ قمت بتحضير مثال بسسيط ومتكامل (على صفحة هـ.ت.م.ل مرفقة) ليوضح كل من trunc و round لمقارنة التواريخ.

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



SammerJo

______

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

  • بعد 3 أسابيع...
  • بعد 1 سنة...

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

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

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

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

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

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

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