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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيفية مقارنة التوايخ ؟


8 رد (ردود) على هذا الموضوع

#1 Yousef_Elkordi

Yousef_Elkordi

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 25 April 2009 - 10:08 PM

السلام عليكم

اخواني ... لدي سؤال بسيط وهو اول مشاركة لي بالمنتدى

اريد ان اقارن بين تاريخين و ايجاد الاكبر بينهم


ولكم جزيل الشكر

#2 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 25 April 2009 - 10:46 PM

السلام عليكم... تتم عملية المقارنة بشكل مباشر:

SQL> select ename,hiredate from emp where hiredate<to_date('18 12 1980','dd mm yyyy')
2 /

ENAME HIREDATE
---------- ---------
SMITH 17-DEC-80


تم تحويل السلسلة إلى تاريخ لأنها لا تتطابق مع الفورمات الخاص بالتاريخ DD-MON-RR , المثال التالي يبين عملية المقارنة مع قيم تطابق الفورمات القياسي فلا حاجة لتحويلها:

SQL> select ename,hiredate from emp where hiredate<'18-DEC-80'
2 /

ENAME HIREDATE
---------- ---------
SMITH 17-DEC-80


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#3 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 April 2009 - 10:53 PM

أخي الحبيب troman أعتقد أن الاخ يقصد أن المتغيريين مجهولين محتاجين عمل block pl/sql

عفوا أعتقد هذا مايقصد الاخ ليس إلا

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#4 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 25 April 2009 - 11:14 PM

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

declare
Pd1 date:=to_date('&Date1','dd mm yyyy');
Pd2 date:='&Date2';
begin if Pd1>Pd2
then dbms_output.put_line('Date1>Date2');
elsif Pd1<Pd2 then dbms_output.put_line('Date1>Date2');
else dbms_output.put_line('Date1 Equal Date2');
end if;
end;
/


أتمنى أن يكون هذا ما قصده الأخ بسؤاله...

تم التعديل بواسطة TROYMAN, 25 April 2009 - 11:18 PM.


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#5 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 April 2009 - 11:43 PM

تستحق التحية يا TROYMAN على مجهوداتك
جزاك الله كل خير

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#6 Yousef_Elkordi

Yousef_Elkordi

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 26 April 2009 - 12:21 AM

شكرا لكم اخواني الاعزاء

واسف على قلت التوضيح

بس طلبي هو انة لدي DB مدخل فيها التواريخ

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

وللتوضيح اكثر فاكثر

فانة لدي DB فيها البينات التالية

name Date Cust_code
------ --------|-----------------------|---------------------------
Ali 20\12\2009 c2020
yousef 12\12\2009 c2430
Ali 22\1\2009 c2020
Ahmed 20\12\2009 c2000
Ali 06\11\2007 c2020

كما ترون لدي اسم الشخص ( علي ) مكرر 3 مرات و لدي الكثير مثل هذا التكرار بال DB
وقدرت ان احصر عدد الاشخاص الذين لديهم تكرار بال DB
ولكن الان لدي مشكلة ... وهي ان التكرارات ( للشخص الواحد ) بتواريخ مختلفة , فاريد Query تعمل على جلب اخر تاريخ لكل التكرارات الموجودة بالاسماء التي قمت بحصرها قبل ذلك


وشاكر لكم سرعة الرد .. و اسف على قلت التوضيح باول مرة .

#7 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 26 April 2009 - 12:37 AM

مسا الخير...
الحل بسيط باستخدام Group by
select name,max(Date) from TableName group by name;


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#8 Yousef_Elkordi

Yousef_Elkordi

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 26 April 2009 - 08:09 AM

السلام عليكم

شكرا لك اخي العزيز على سرعى الرد

ولكن ال MAX تاتيني بأكبر تاريخ لكافة الاسماء .. و انا اريدها لكل شخص لة تكرار فقط
بمعني اخر :

لدي Ali ثلاث تواريخ
و لدى MOhamed تاريخين
ولدى Salim اربع تواريخ

فانا اريد ان اكتب Query تاتي لي بأكبر تاريخ لكل شخص منهم
ولا اريد ان اطبق ال MAX على كل شخص على حدى

واتمنى ان تكون الفكرة و صلت لكم

#9 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 April 2009 - 08:27 AM

إذن زود having على ماسبق
زي كده
select name,max(Date) from TableName group by name having count(name)>1;

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين