Bişeyleri yapar verirsiniz patronunuz dahasını da ister...
İşte bir önceki topicde bahsettiğim karşılaştırmaya birde süre kıyaslaması istediler:
bir tabloda görüşme başlama zamanı, bitiş zamanı:
08:39:39, 08:39:49 şeklinde tutulmuş
görüşme süresi olarak
baslama zamanı- bitiş zamanını saniye cinsinden hesaplamam gerekiyor.
Bunun için
to_date(BITSAAT,'HH/MI/ss') - to_date(BASSAAT,'HH/MI/ss')
şeklinde fark aldım ancak sonucu 0.00011574074074... şeklinde dönderdi.
Olmadı yani
Bunu saniye cinsinden nasil hesaplarim?
Bir problem daha :)
Bir problem daha :)
Boş Başak Dik Durur...
Santranç bitince şah da piyon da aynı torbaya girermiş...
Santranç bitince şah da piyon da aynı torbaya girermiş...
http://www.doganzorlu.com/oracle adresinde saat farkı hesaplayan bir prg örneği var incele.
sanırım işinizi görecektir.
sanırım işinizi görecektir.
tüm değerleri saniyeye çevirip fark aldım oldu
select
(
to_number(substr(BITSAAT,1,2))*3600+ to_number(substr(BITSAAT,4,2))*60+to_number(substr(BITSAAT,7,2))
)-
(
to_number(substr(BASSAAT,1,2))*3600+ to_number(substr(BASSAAT,4,2))*60+to_number(substr(BASSAAT,7,2)
)
)
sn from DMS_GUN0515
select
(
to_number(substr(BITSAAT,1,2))*3600+ to_number(substr(BITSAAT,4,2))*60+to_number(substr(BITSAAT,7,2))
)-
(
to_number(substr(BASSAAT,1,2))*3600+ to_number(substr(BASSAAT,4,2))*60+to_number(substr(BASSAAT,7,2)
)
)
sn from DMS_GUN0515
Boş Başak Dik Durur...
Santranç bitince şah da piyon da aynı torbaya girermiş...
Santranç bitince şah da piyon da aynı torbaya girermiş...
Cevap bulunmuş ama ileride aynı hata ile karşılaşabilecek arkadaşlar için bir çözümünü de ben yazmak istedim.
Oracle'de iki tane date tipi ile normal sayısal değerler arasında fark almak gibi işlem yapabilirsiniz. Sonuç gün cinsinden numerik olarak döner. İstediğiniz formata dönüştürebilirsiniz. Şöyleki;
Çıktı ise:
olacaktır.
Oracle'de iki tane date tipi ile normal sayısal değerler arasında fark almak gibi işlem yapabilirsiniz. Sonuç gün cinsinden numerik olarak döner. İstediğiniz formata dönüştürebilirsiniz. Şöyleki;
Kod: Tümünü seç
DECLARE
start_date DATE;
end_date DATE;
time_difference NUMBER;
time_difference_in_seconds NUMBER;
time_difference_in_minutes NUMBER;
BEGIN
start_date := to_date('09.09.2006 09:57:49',
'DD.MM.YYYY HH24:MI:SS');
end_date := to_date('09.09.2006 09:59:34',
'DD.MM.YYYY HH24:MI:SS');
time_difference := end_date - start_date;
time_difference_in_seconds := time_difference * 86400; --24*60*60
time_difference_in_seconds := trunc(time_difference_in_seconds, 4);
time_difference_in_minutes := time_difference * 1440; --24*60
time_difference_in_minutes := trunc(time_difference_in_minutes, 4);
dbms_output.put_line('Start Time : ' ||
to_char(start_date, 'DD.MM.YYYY HH24:MI:SS'));
dbms_output.put_line('End Time : ' ||
to_char(end_date, 'DD.MM.YYYY HH24:MI:SS'));
dbms_output.put_line('Difference in seconds :' ||
time_difference_in_seconds);
dbms_output.put_line('Difference in minutes :' ||
time_difference_in_minutes);
END;
Kod: Tümünü seç
Start Time : 09.09.2006 09:57:49
End Time : 09.09.2006 09:59:34
Difference in seconds :105
Difference in minutes :1,75
En son Mennan tarafından 29 Eyl 2006 05:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
İki tarihi birbirinden çıkardığınızda 1/86400 lük bir değer elde edersiniz. Bu neden iki tarihi birbirinden çıkarıp 86400 le çarpmanız yeterlidir. Bu sayede saniye cinsinden aradaki farkı bulabilirsiniz.
gibi. Bunun nedeni oracle in tarih tipli alanı natice olarak dword ibr alanda tutmasından (tıpkı C ve pascal daki date gibi ki onun da atası unix sistem çağrılarıdır).
Çıkarma işlemi yaptığınızda iki sayıyı birbirinden çıkarırsınız ve bu sayı yüksek bitlerden düşük bitlere doğru paketlenmiş bir bilgi taşır. Detayları heryerde bulabilirsiniz.
Selametle,
İki tarihi birbirinden çıkardığınızda 1/86400 lük bir değer elde edersiniz. Bu neden iki tarihi birbirinden çıkarıp 86400 le çarpmanız yeterlidir. Bu sayede saniye cinsinden aradaki farkı bulabilirsiniz.
Kod: Tümünü seç
SELECT (sysdate - TO_DATE ('2006 09 11', 'YYYY MM DD')) * 86400
FROM dual;
Çıkarma işlemi yaptığınızda iki sayıyı birbirinden çıkarırsınız ve bu sayı yüksek bitlerden düşük bitlere doğru paketlenmiş bir bilgi taşır. Detayları heryerde bulabilirsiniz.
Selametle,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)