Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Tarih Fark İşlemleri
#1
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ı
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#2
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.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#3
Ö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.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#4
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
There's no place like 127.0.0.1
WWW
Cevapla
#5
(14-02-2017, Saat: 17:48)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSanı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.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#6
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
There's no place like 127.0.0.1
WWW
Cevapla
#7
Yakup hocam sendeki DATE_FORMAT(ctarih,'%Y-%m-%d %H:%i:%s') ekrana ne basıyor belki onda bi farklılık vardır.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#8
@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?
There's no place like 127.0.0.1
WWW
Cevapla
#9
(15-02-2017, Saat: 11:34)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol@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();
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#10
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)
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi