الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

السلام عليكم

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

سنه شهر يوم ORACLE9i


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

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

بتاريخ:

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



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;



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

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

جزاك الله خير يا اخ سامح
لكن المشكلة في الشفرة التالية :

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 يوما ولكن قد تكون عدد ايام الشهر اقل او اكثر

بتاريخ:

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

بتاريخ:

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

بتاريخ:

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

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

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

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

بتاريخ:
  • كاتب الموضوع

الأخ سامح :

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

بتاريخ:

السلام عليكم ورحمة الله وبركاته جرب التالي والنتيجة أدناه

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

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

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

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

Account

Navigation

البحث

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.