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

الفرق بين تاريخين باليوم والشهر السنة


ahmedali

Recommended Posts

إخواني الأعزاء :
طلب من حساب مدة نهاية الخدمة لموظف بحيث تكون على الشكل التالي

كام سنة وكام شهر وكام يوم

قمت بعمل الكود التالي وطبعا السنة مظبوطة ولكن الشهر واليوم مش مضبوطين
والكود كالتالي:
select
ename,
trunc(months_between(sysdate,hiredate)/12) year,
round((months_between(sysdate,hiredate)-trunc(months_between(sysdate,hiredate)))*12) months,
mod((round(sysdate-hiredate)),30) days
from emp;

المطوب من الإخوة الكرام جزاهم الله خيريا تعديل الجملة بحيث ناتج الشهر وناتج اليوم يكون صحيحين
مرفق أيضا ملف به الكود مفصل

أشكركم جميعا ,

DateBetween.txt

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

select ename,
trunc(months_between(sysdate,hiredate)/12) year,
trunc(mod(trunc(months_between(sysdate,hiredate)/12))) month,
from emp;
بس ما معها ايام لانه انا مش في البيت وما عندي س كيو ال هلا بس انشا الله بحاول ابعتلكياها ما بدي اكتبلك شي غلط بس هدا الكود 100%

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

مشكور أخي الغالي
الحمد الله توصلت لحل لها والحل قمت بتطبيقه على البرنامج الذي أقوم بعمل لشئون الموظفين
والكود تم تعديله عليه وكتابته من داخل الفور على وكان كالتالي

declare
sys_day NUMBER;
sys_month NUMBER;
sys_year NUMBER;
st_day NUMBER;
st_month NUMBER;
st_year NUMBER;
begin
SYS_DAY := TO_CHAR(:SERV_FINAL_DATE, 'DD');
SYS_MONTH := TO_CHAR(:SERV_FINAL_DATE, 'MM');
SYS_YEAR := TO_CHAR(:SERV_FINAL_DATE, '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;
هذا الكود يمكن ينتفع به أي أخ
وتحياتي للجميع الأعضاء في المنتدى الغالي علينا
نفس الكود مرفق في ملف نصي

datet.txt

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

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

اخى الكريم انا عندى نفس الشغلة وهذا الكود شغال ميه المية

declare
year1 number ;
y  number;
d number;
m number;	
begin year1:=(:END_SERVICE_DATE-:MF_START_DATE);
d:=year1 / 365;
:year:=trunc(d);
d:=year1  mod 365;
m:=d / 30;
:month:=trunc(m);
:day:=d mod 30;
end;
end if;
end;

جربه واعطينى ردك

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

  • بعد 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.

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

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

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