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

طرح وقت من وقت اخر


وهاس

Recommended Posts

هل توجد دالة تقوم طرح وقت من وقت اخر وتكون النتيجة الوقت الفارق
مثال
10:30:10 - 10:45:5 = 0:15:5
وفي حالة عدم وجود هذة الدالة فك كيف يمكن ان يحسب الوقت الفارق
:blink:

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

يمكنك استخدام حقول من نوع timestamp لاجراء مثل هذه العملية أو يمكنك تحويل القيمة من شكل حرفي الى timestamp
select to_timestamp('10:45:51','hh24:mi:ss')-to_timestamp('10:30:10','hh24:mi:ss') from dual

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

شكرا لك يا اخ motasem علي الرد
لكن حاولت انفذ هذة الطريقة في شاشة ال SQL+ وحدث الخطأ التالي


ERROR at line 1:
ORA-00904: invalid column name

حيث كان يعترض علي الامر to_timestamp('10:45:51','hh24:mi:ss')

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

الاخ الكريم
النسخة من ال sql لا تعرف هذا التعريف
وانما يتم تطبيقها في اوراكل 9i
يعني غير متعارف على to_time_stamp في sql 8i
واليك هذا الرابط لعله يفيد
http://www.psoug.org/reference/timestamp.html

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

شكرا لكم على تعاونكم
لقد قمت بكتابة دالة تقوم بعمل الطرح بين وقتين
واليكم هذة الدالة و انشاء اللة ان تكون نافعة للجميع
فقط قم بوظع الكود في الفورم في program unit

FUNCTION SUB_TIME(T1 VARCHAR2, T2 VARCHAR2) RETURN VARCHAR2  IS
HH1 NUMBER(4):=0;
 MI1 NUMBER(4):=0;
 SS1 NUMBER(4):=0; 
HH2 NUMBER(4):=0;
 MI2 NUMBER(4):=0;
 SS2 NUMBER(4):=0; 
 NEW_HH NUMBER(4):=0;
 NEW_MI NUMBER(4):=0;
 NEW_SS NUMBER(4):=0; 
 NEW_TIME VARCHAR(12):=0;

BEGIN HH1:=TO_NUMBER(SUBSTRB(T1,1,2));
MI1:=TO_NUMBER(SUBSTRB(T1,4,2));
SS1:=TO_NUMBER(SUBSTRB(T1,7,2));


HH2:=TO_NUMBER(SUBSTRB(T2,1,2));
MI2:=TO_NUMBER(SUBSTRB(T2,4,2));
SS2:=TO_NUMBER(SUBSTRB(T2,7,2));

NEW_HH:=HH1-HH2;
NEW_MI:=MI1-MI2;
NEW_SS:=SS1-SS2;

IF NEW_HH < 0 THEN 
	NEW_HH:=NEW_HH * -1;
END IF;
IF NEW_MI < 0 THEN 
	NEW_MI:=NEW_MI * -1;
END IF;
IF NEW_SS < 0 THEN 
	NEW_SS:=NEW_SS * -1;
END IF;

NEW_TIME:=NEW_HH || ':' || NEW_MI || ':' || NEW_SS;
 RETURN NEW_TIME;
END;



ولكم الشكر :blink:

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

select
lpad(trunc
(
to_date('10:45:05','HH:MI:SS')-
to_date('10:40:01','HH:MI:SS')
)*24,2,'0')||':'||
lpad(trunc((
(
(
to_date('10:45:05','HH:MI:SS')-
to_date('10:40:01','HH:MI:SS')
)*24
)
-
(
trunc(
to_date('10:45:05','HH:MI:SS')-
to_date('10:40:01','HH:MI:SS')
)*24
)
 )*60),2,'0')||':'||
lpad(trunc((
((
to_date('10:45:05','HH:MI:SS')-
to_date('10:40:01','HH:MI:SS')
)*24*60)-
trunc((
to_date('10:45:05','HH:MI:SS')-
to_date('10:40:01','HH:MI:SS')
)*24*60)
 )*60),2,'0')
from dual

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

  • بعد 6 سنة...

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

طريقة جيدة، و بارك الله فيكم

و يوجد طريقة أخرى أيضا كالتالي:


SELECT to_number( to_char(to_date('1','J') + (TO_DATE('10:45:15','HH24:MI:SS') - TO_DATE('10:30:05','HH24:MI:SS')), 'J') - 1)  days,
to_char(to_date('00:00:00','HH24:MI:SS') + (TO_DATE('10:45:15','HH24:MI:SS') - TO_DATE('10:30:05','HH24:MI:SS')), 'HH24:MI:SS') time
FROM DUAL

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

  • بعد 8 سنة...
في ١٣‏/٨‏/٢٠٠٥ at 12:08, motasem said:

يمكنك استخدام حقول من نوع timestamp لاجراء مثل هذه العملية أو يمكنك تحويل القيمة من شكل حرفي الى timestamp
select to_timestamp('10:45:51','hh24:mi:ss')-to_timestamp('10:30:10','hh24:mi:ss') from dual

كيف من الممكن أن احسب الفرق بين توقيتين في يومين مختلفين 

مثلا

وقت النهاية يوم ٤/٩/٢٠٢٠ الساعة ٠٢:٤٥ صباحاً

وقت البداية يوم ٣/٩/٢٠٢٠ الساعة ٢٣:٣٠ مساءً

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

  • بعد 2 شهور...

بارك الله فيكم جميعا والله عمل جميل ورائع

أما إذا كان إضافة عدد إلى تاريخ معين مثل عطلة الإجازة+ عدد أيام الإجازة

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

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

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

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

×   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.

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

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

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