Delphi Can
Tarih Fark İşlemleri - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Veri Tabanı (https://www.delphican.com/forumdisplay.php?fid=4)
+--- Forum: MySQL (https://www.delphican.com/forumdisplay.php?fid=14)
+--- Konu Başlığı: Tarih Fark İşlemleri (/showthread.php?tid=671)

Sayfalar: 1 2


Tarih Fark İşlemleri - yhackup - 14-02-2017

Merhabalar,
MySQL'de tarih işlemleri ile uğraşıyorum. bir sorum var. bazı fonksiyonlar kullandım ama tam istediğim veri için iş görmedi fikir alayım sizden
Cümlem bu, alanlar datetime tipinde.

SELECT 
  jobs.gtarih,
  jobs.ctarih,
  DATEDIFF(ctarih, gtarih) AS DATEDIFF,
  TIMEDIFF(ctarih, gtarih) AS TIMEDIFF,
  TIMESTAMPDIFF(HOUR, gtarih, ctarih) AS TIMESTAMPDIFF_HOUR,
  TIMESTAMPDIFF(MINUTE, gtarih, ctarih) AS TIMESTAMPDIFF_MINUTE,
  SEC_TO_TIME((TIMESTAMPDIFF(MINUTE, gtarih, ctarih) * 60) * 60) as SEC_TO_TIME
FROM
  jobs

Sonuçlar ise bu şekilde,
7790Or.png


Tam olarak şunu istiyorum, iki tarih arasında gün, saat, dakika farkı ilk iki kayıtta TIMEDIFF işimi gördü, ama fark günden fazla olunca TIMEDIFF çalışmıyor. dakikadan saat ve günü bulayım dedim (SEC_TO_TIME ile) o da olmadı


Tarih Fark İşlemleri - esistem - 14-02-2017

Hocam böyle bir durumda stored proc. yazmıştım, giriş ve çıkış tarihi aynı ise saat farkını alıyosun, eğer farklı ise cikis>giris tarihi ise giristarihi+23:59:00 dan giris saatini çıkartıp, cikistarihi içinde 00:00:00 dan çıkış saatini çıkartıp toplatıp mesai saatini buluyodum, sende böyle bişi yapmaya mecbursun sanırım.


Cvp: Tarih Fark İşlemleri - yhackup - 14-02-2017

Öyle gibi görünüyor olmadı onu da delphi tarafına bırakırım Sad

Ama Google de arattığımda, bir kaç yerde bu fonksiyonun doğru çalıştığını gördüm, nereyi atlıyoruz acaba


Örnek Bir yazı,
Alıntı:Timediff() fonksiyonu iki tarih arasındaki farkı saat cinsinden döndürür demiştik. Eğer iki tarih arasında gün farkı varsa sonuç yine saat olarak dönecektir. Sorgu sonucunda 2 gün timediff fonksiyonu için 48 saat demektir.
select timediff('2012-01-20 20:00:00', '2012-01-18 19:15:00');
Bu sorgunun çıktısı 48:45:00 olacaktır. 48 saat, 45 dakika, 00 saniye. Şu anki zaman ile belirli bir tarih arasındaki saat farkını bulmak için Mysql’in now() fonksiyonu kullanılabilir. Bu fonksiyon curdate() fonksiyonu gibi çalışır. Fakat tarihi datetime tipinde döndürür.



Tarih Fark İşlemleri - SimaWB - 14-02-2017

Sanırım TIMEDIFF fonksiyonu %Y-%m-%d %h:%i:%s formatında bir tarih istiyor. O yüzden önce DATE_FORMAT ile format değişikliği yaparsanız çalışır diye tahmin ediyorum


Cvp: Tarih Fark İşlemleri - yhackup - 15-02-2017

(14-02-2017, Saat: 17:48)SimaWB Adlı Kullanıcıdan Alıntı: Sanırım TIMEDIFF fonksiyonu %Y-%m-%d %h:%i:%s formatında bir tarih istiyor. O yüzden önce DATE_FORMAT ile format değişikliği yaparsanız çalışır diye tahmin ediyorum

Maalesef 

TIMEDIFF(DATE_FORMAT(ctarih,'%Y-%m-%d  %H:%i:%s'), DATE_FORMAT(gtarih,'%Y-%m-%d  %H:%i:%s'))

Bu dekilde denediğimde de doğru çalışmadı abi,




select timediff('2017-02-22 08:41:00', '2017-02-24 18:41:00');
 

Bu da hatalı hesaplıyor. mysql versiyonunda değişti mi acaba, mutlaka bir çözümü olmalı bunun.


Tarih Fark İşlemleri - SimaWB - 15-02-2017

select timediff('2017-02-22 08:41:00', '2017-02-24 18:41:00');
Bende   -58:00:00   çıktı ki doğru gibi..

MySQL 5.5


Tarih Fark İşlemleri - esistem - 15-02-2017

Yakup hocam sendeki DATE_FORMAT(ctarih,'%Y-%m-%d %H:%i:%s') ekrana ne basıyor belki onda bi farklılık vardır.


Tarih Fark İşlemleri - SimaWB - 15-02-2017

@yhackup;
MySQL'de DATETIME değeri YYYY-MM-DD HH:MM:SS formatın değil midir?
Siz nasıl 19.01.2017 15:21:57 şeklindeki bir tarihi DATETIME olarak saklayabiliyorsunuz?


Cvp: Tarih Fark İşlemleri - yhackup - 15-02-2017

(15-02-2017, Saat: 11:34)SimaWB Adlı Kullanıcıdan Alıntı: @yhackup;
MySQL'de DATETIME değeri YYYY-MM-DD HH:MM:SS formatın değil midir?
Siz nasıl 19.01.2017 15:21:57 şeklindeki bir tarihi DATETIME olarak saklayabiliyorsunuz?


bkOJ6d.png

Alan datetime, dediğiniz formatta saklanıyor ama editör bana düzgün gösteriyor olabilir mi ?

Ben tarihleri trigger ile yazıyorum
SET NEW.ctarih=NOW();



Tarih Fark İşlemleri - SimaWB - 15-02-2017

Windows kurulumda MySQL Command Line Client da kurulur. Onunla veritabanına bağlantı yapıp kontrol edebilirsin. (Aradan editörü çıkartıp bakmak için)