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

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

صورة
- - - - -

كيف يتم طرح تاريخين فى الأوراكل


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

#1 ktooof

ktooof

    عضو

  • الأعضــاء
  • 3 مشاركة
  • الاسم الأول:hussam
  • اسم العائلة:osman
  • البـلـد: Country Flag

تاريخ المشاركة 04 May 2008 - 11:21 AM

السلام عليكم

أرجو المساعدة فى إيجاد إجراء يتم من خلاله طرح تاريخين وإ عطاء النتيجة فى شكل

سنه شهر يوم ORACLE9i


مثال: تاريخ التعيين 11-يناير -1950
تاريخ التقاعد 12-مارس-2008

النتيجة:
مدة الخدمة سنة شهر يوم
52 10 28


#2 sameh bakkar

sameh bakkar

    مشرف قسم المبتدئين

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

تاريخ المشاركة 05 May 2008 - 01:18 AM

على قدر فهمى لسؤالك هذا الكود يحل المشكله و انا جربته مع تقرير خاص بالمعاشات


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;


بالتوفيق و الله المستعان،،

Sameh Bakkar

Principal Oracle Apps Techno-Functional Consultant / Oracle E-Business Suite Certified Trainer

Oracle E-Business R11 Suite Applications Workflow Certified Expert

Oracle E-Business Suite R12 HCM Certified Implementation Specialist

Oracle Certified Professional

ITIL V3 Foundation certified

Microsoft Project certified




الموقع الخاص: AppsLead | Your Honest Guide | Sameh Bakkar


#3 ktooof

ktooof

    عضو

  • الأعضــاء
  • 3 مشاركة
  • الاسم الأول:hussam
  • اسم العائلة:osman
  • البـلـد: Country Flag

تاريخ المشاركة 05 May 2008 - 08:45 AM

جزاك الله عنا الف خير يا مهندس سامح
هذا هو بالضبط ما أريده


#4 سالم الفروي

سالم الفروي

    عضو

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

تاريخ المشاركة 05 May 2008 - 08:59 AM

جزاك الله خير يا اخ سامح
لكن المشكلة في الشفرة التالية :
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 يوما ولكن قد تكون عدد ايام الشهر اقل او اكثر

حديث شريف : الايمان يمان و الحكمة يمانية


#5 oramesa

oramesa

    مشترك

  • الأعضــاء
  • 94 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:programming ,read write poetery,thinking,look for new situation

تاريخ المشاركة 05 May 2008 - 12:38 PM

افرض ان تواريخك هي xd و yd
وتريد ان تضع الفرق في dd
يكون على النحو التالي
d:=:yd-xd;

#6 sameh bakkar

sameh bakkar

    مشرف قسم المبتدئين

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

تاريخ المشاركة 05 May 2008 - 02:26 PM

الأخ سالم الفروي
اذا كان لديك حل فتفضل به و يبقى جزاك الله خير .. انا عن نفسى لم اواجه هذه المشكله على الأطلاق مع اى عميل .... بالتوفيق للجميع :rolleyes: :D

Sameh Bakkar

Principal Oracle Apps Techno-Functional Consultant / Oracle E-Business Suite Certified Trainer

Oracle E-Business R11 Suite Applications Workflow Certified Expert

Oracle E-Business Suite R12 HCM Certified Implementation Specialist

Oracle Certified Professional

ITIL V3 Foundation certified

Microsoft Project certified




الموقع الخاص: AppsLead | Your Honest Guide | Sameh Bakkar


#7 proMido

proMido

    عضو

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

تاريخ المشاركة 05 May 2008 - 09:50 PM

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

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

واقدم شكر خاص للباشمهندس سامح على مواضيعه المتميزة ومشاركاتة

واعتقد بالنسبة لهذه المشاركة ان هذه الداله قد تفيد وهى
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;


#8 ktooof

ktooof

    عضو

  • الأعضــاء
  • 3 مشاركة
  • الاسم الأول:hussam
  • اسم العائلة:osman
  • البـلـد: Country Flag

تاريخ المشاركة 06 May 2008 - 01:05 PM

الأخ سامح :

عند تنفيذ ال DECLARE يتم عرض رساله
Bind variable "SERV_PER_MONTH" not declared.
التكرم بمعرفة سبب ال ERORR
لانى إجتهدت كثيرا ولم أعرف السبب

#9 Shibeika

Shibeika

    عضو نشط

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

تاريخ المشاركة 06 May 2008 - 01:32 PM

السلام عليكم ورحمة الله وبركاته جرب التالي والنتيجة أدناه
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

تم التعديل بواسطة Amgad, 06 May 2008 - 02:35 PM.