ktooof بتاريخ: 4 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 4 مايو 2008 السلام عليكمأرجو المساعدة فى إيجاد إجراء يتم من خلاله طرح تاريخين وإ عطاء النتيجة فى شكل سنه شهر يوم ORACLE9iمثال: تاريخ التعيين 11-يناير -1950 تاريخ التقاعد 12-مارس-2008النتيجة: مدة الخدمة سنة شهر يوم 52 10 28 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sameh bakkar بتاريخ: 4 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 4 مايو 2008 على قدر فهمى لسؤالك هذا الكود يحل المشكله و انا جربته مع تقرير خاص بالمعاشات declare sys_day NUMBER; sys_month NUMBER; sys_year NUMBER; st_day NUMBER; st_month NUMBER; st_year NUMBER;begin SYS_DAY := TO_CHAR(sysdate, 'DD'); SYS_MONTH := TO_CHAR(:sysdate, 'MM'); SYS_YEAR := TO_CHAR(:Syadate, 'YYYY'); ST_DAY := TO_CHAR(:HIREDATE, 'DD'); ST_MONTH := TO_CHAR(:HIREDATE, 'MM'); ST_YEAR := TO_CHAR(:HIREDATE, 'YYYY'); IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + 30; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; IF TO_NUMBER(SYS_MONTH) < TO_NUMBER(ST_MONTH) THEN SYS_MONTH := TO_NUMBER(SYS_MONTH) + 12; SYS_YEAR := TO_NUMBER(SYS_YEAR)- 1; END IF; :SERV_PER_DAY := TO_NUMBER(SYS_DAY) - TO_NUMBER(ST_DAY); :SERV_PER_MONTH := TO_NUMBER(SYS_MONTH) - TO_NUMBER(ST_MONTH); :SERV_PER_YAER := TO_NUMBER(SYS_YEAR) - TO_NUMBER(ST_YEAR);EXCEPTION WHEN NO_DATA_FOUND THEN NULL; end; بالتوفيق و الله المستعان،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ktooof بتاريخ: 5 مايو 2008 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 مايو 2008 جزاك الله عنا الف خير يا مهندس سامحهذا هو بالضبط ما أريده اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
سالم الفروي بتاريخ: 5 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 5 مايو 2008 جزاك الله خير يا اخ سامحلكن المشكلة في الشفرة التالية : IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + 30; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; انت افترضت ان الشهر الذي بدا الموظف العمل فيه 30 يوما ولكن قد تكون عدد ايام الشهر اقل او اكثر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
oramesa بتاريخ: 5 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 5 مايو 2008 افرض ان تواريخك هي xd و ydوتريد ان تضع الفرق في ddيكون على النحو التاليd:=:yd-xd; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sameh bakkar بتاريخ: 5 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 5 مايو 2008 الأخ سالم الفروي اذا كان لديك حل فتفضل به و يبقى جزاك الله خير .. انا عن نفسى لم اواجه هذه المشكله على الأطلاق مع اى عميل .... بالتوفيق للجميع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
proMido بتاريخ: 5 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 5 مايو 2008 السلام عليكم ورحمة الله وبركاتههذه اول مشاركة لى فى هذا المنتدى حيث اننى مشترك حديثاواتمنى ان استمر فيه حيث اننى بالفعل استفيد منه واتمنى ان استمر معكمواقدم شكر خاص للباشمهندس سامح على مواضيعه المتميزة ومشاركاتة واعتقد بالنسبة لهذه المشاركة ان هذه الداله قد تفيد وهى last_day(),وهى تاخد متغير من نوع تاريخ dateوتعود باخر يوم فى هذا الشهر الموجود بالتاريخفكما فى مثال الباشمهندس سامح يمكن ان نقوم بوضع هذه الدالة بدلا من رقم 30 فقط IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + to_number(to_char(last_day(:HIREDATE) ,'dd') ) ; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ktooof بتاريخ: 6 مايو 2008 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 6 مايو 2008 الأخ سامح :عند تنفيذ ال DECLARE يتم عرض رساله Bind variable "SERV_PER_MONTH" not declared.التكرم بمعرفة سبب ال ERORR لانى إجتهدت كثيرا ولم أعرف السبب اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Shibeika بتاريخ: 6 مايو 2008 تقديم بلاغ مشاركة بتاريخ: 6 مايو 2008 (معدل) السلام عليكم ورحمة الله وبركاته جرب التالي والنتيجة أدناه select trunc((to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'))/365) years, trunc(mod(to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'),365)/30) months trunc(mod(mod(to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'),365),30)) days from dual / 85 سنة وشهرين و15 يوم YEARS MONTHS DAYS ------ ---------- ---------- 58 2 15 تم تعديل 6 مايو 2008 بواسطة Amgad اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.