الانتقال إلى المحتوى
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

بتاريخ:

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

عندي جدول موجود في عمود من نوع( varchr2(10 ومخزن فيه وقت دخول الموظف TIME IN قيمته على سبيل المثال 07:29:38

والفيلد الثاني نفس النوع واسمه TIME OUT وقيمته 13:41:32

كيف احسب عدد الساعات الي اشتغلها الموظف

افيدوني الله يخليكم

بتاريخ:

الفرق بين وقتين على شكل HH24:MI

من مشاركة سابقه بالمنتدى

DECLARE
-- format mask for d1 and d2 ===> HH24:MI 

DIN	DATE :=:d1;
DOUT	DATE :=:d2;

oin  	date;	
oout  	date;	

Months	Number;
Days    Number;
Hours   Number;
Minutes Number;
Seconds  Number;
Diff    Number;
Diff0   Number;
Diff1   Number;
Diff2   Number;
Begin                                             

 :r:= to_number(abs(to_char(din - dout)));
 Diff    :=to_number(abs(:r));
 
Days:=FLOOR(Diff);
Diff0:=Mod(Diff,1);
:r1:= Days;

Hours:=FLOOR(Diff0*24);
Diff1:=Mod(Diff0*24,1);
:r2:=Hours;

Minutes:=FLOOR(Diff1*60);
Diff2:=MOD(Diff1*60,1);
Seconds:=Floor(Diff2*60);

:r3:=Minutes;
:r4:=Seconds;
end;

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

شكرا جزيلا اخي الكريم amgad بارك الله فيك

بتاريخ:

اليك هذه الطريقه ايضا .. لعلها تفيدك


Getting the difference between Dates
Frequently we are asked -- how can I find the number of minutes between two dates or what is the amount of elapsed time.  With Oracle Dates, this is pretty trivial, you can get either TOTAL (days, hours, minutes, seconds) between 2 dates simply by subtracting them or with a little mod'ing you can get Days/Hours/Minutes/Seconds between. 
For example: 

SQL> set serveroutput on 
SQL> 
SQL> declare 
2          a       date; 
3          b       date; 
4  begin 
5          a := sysdate; 
6          dbms_lock.sleep(10);    -- sleep about 10 seconds give or take 
7          b := sysdate; 
8 
9          dbms_output.put_line( b-a || ' of a day has elapsed' ); 
10          dbms_output.put_line( (b-a)*24 || ' of an hour has elapsed' ); 
11          dbms_output.put_line( (b-a)*24*60 || ' of a minute has elapsed' ); 
12          dbms_output.put_line( (b-a)*24*60*60 || ' seconds has elapsed' ); 
13  end; 
14  / 
.000127314814814814814814814814814814814815 of a day has elapsed 
.00305555555555555555555555555555555555556 of an hour has elapsed 
.1833333333333333333333333333333333333336 of a minute has elapsed 
11.00000000000000000000000000000000000002 seconds has elapsed 
PL/SQL procedure successfully completed.


To break the diff between 2 dates into days, hours, minutes, sec -- you can use the following: 

select to_char( created, 'dd-mon-yyyy hh24:mi:ss' ), 
     trunc( sysdate-created ) "Dy", 
     trunc( mod( (sysdate-created)*24, 24 ) )  "Hr", 
     trunc( mod( (sysdate-created)*24*60, 60 ) )  "Mi", 
trunc( mod( (sysdate-created)*24*60*60, 60 ) ) "Sec", 
     to_char( sysdate, 'dd-mon-yyyy hh24:mi:ss' ), 
     sysdate-created "Tdy", 
     (sysdate-created)*24 "Thr", 
     (sysdate-created)*24*60 "Tmi", 
     (sysdate-created)*24*60*60 "Tsec" 
from all_users 
where rownum < 50 
/

Dy gives you number of days between 2 dates (partial days discarded).  Tdy gives you total days including fractions (eg: you'll get 1.5 for 1 and 1/2 days).  Likewise for HR and THR and so on. 

Sybase users are used to using datediff in the database and are many times baffled by the lack of a function to do date arithemetic that they assume Oracle cannot do it.  It is really just that date arithmetic is so trivial that a specialized function like datediff is not needed.  Just subtract.  You get the difference in days.  Multiply by 24 -- hours, multiply by 60 minutes, multiply by 60 -- seconds. 

If you really want 'datediff' in your database, you can just do something like this: 


SQL> create or replace function datediff( p_what in varchar2, 
2                                       p_d1   in date, 
3                                       p_d2   in date ) return number 
4  as 
5      l_result    number; 
6  begin 
7      select (p_d2-p_d1) * 
8             decode( upper(p_what), 
9                     'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL ) 
10       into l_result from dual; 
11 
11      return l_result; 
12  end; 
13  / 
Function created


Now, i just create a view to demonstrate with: 


SQL> create or replace view temp_view 
2  as 
3  select to_date('01-JAN-1999 12:02:04', 'dd-mon-yyyy hh24:mi:ss' ) d1, 
4         to_date('15-MAR-1999 01:34:23', 'dd-mon-yyyy hh24:mi:ss' ) d2 
5  from dual 
6  / 
View created. 

SQL> select datediff( 'ss', d1, d2 ) seconds from temp_view; 

 SECONDS 
---------- 
 6269539 

SQL> select datediff( 'mi', d1, d2 ) minutes from temp_view; 

 MINUTES 
---------- 
104492.317 

SQL> select datediff( 'hh', d1, d2 ) hours from temp_view; 

   HOURS 
---------- 
1741.53861


من موقع توم كيت 
http://asktom.oracle.com/~tkyte/Misc/DateDiff.html

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

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

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

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

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

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.