MySQL DATETIME soru

2 Cevap php

Ben bir DATETIME alanı var. Ben geçen hafta güncellenen tüm kayıtları seçmek istiyorum. Şu anda ben bu sorguyu kullanarak ediyorum:

SELECT SUM(mins_spent) as time_sum FROM todos WHERE 
lastUpdate >= '2008-12-22' AND lastUpdate <='2008-12-28'

Ama olsun sonuç günün saatine bağlı olarak farklı gibi görünüyor, 07:00 tarihinde örneğin ben 17 saat alabilirsiniz ve 23:00 tarihinde I'l o azalan değil, artan edilmelidir olsa bile 14 saat olsun. Ben sorgu değişen düşünüyordum:

SELECT SUM(mins_spent) as time_sum FROM todos WHERE 
lastUpdate >= '2008-12-22 00:00:00' AND lastUpdate <='2008-12-28 00:00:00'

Hiç yardımcı misiniz? Öneriler lütfen ..

2 Cevap

'2008-12-22' eşit olmalıdır '2008-12-22 00:00:00'.

Are you wanting "till end-of-day 28th?" If so, add 23:59:59 to the 2nd date.
Alternatively, you can use lastUpdate < "2008-12-29".

Nasıl varolan Yapılacaklar değişiklikleri izlemek mi? INSERT ve / ya da DELETE? Ya da UPDATE?

Eğer üzerine DELETE 'ing kayıtları iseniz "tamamlanması," sadece daha az kayıtları var olacak.

Eğer UPDATE 'ing iseniz, tarihler geçerli haftanın ötesine geçmek için izin vardır? Eğer öyleyse, bunlar sonuçlarından kaldırılması gerekir.

Neler olduğunu görmek için, Sen, masanın üzerinde birkaç agrega kapma deneyebilirsiniz mins_spent, ve lastUpdate (işareti değerleri aşağı ve nasıl değiştiğini görmek için zaman zaman çalıştırın).

SELECT count(*) AS Total
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'

SELECT min(mins_spent) AS Min, max(mins_spent) AS Max, avg(mins_spent) AS Avg
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'

SELECT min(lastUpdate) AS Min, max(lastUpdate) AS Max
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'

Date and Time Types için MySQL 6.0 Başvuru Kılavuzu bakılırsa, daha fazla veya daha az Tamam yazıldığı gibi olmalıdır. Gerçekten çalışıyor değilse Ancak, o zaman bir raporlanabilir hata bulmuş olabilir.

00:00 ': A TARİH değeri '00 olarak saat bölümünü ekleyerek DATETIME türüyle edilir. Yerine DATETIME değerin zaman parçası gözardı ederek karşılaştırma yapmak için, aşağıdaki şekilde karşılaştırma yapmak için CAST () işlevini kullanın:

date_col = CAST(NOW() as DATE);

Sizin sorgular '<= '2008-12-28' demek; bu kesinlikle daha az-daha az olmamalıdır-daha-veya-eşittir.

Bir çok ince bir nokta olacaktır: (RHS iyi bir tarih olarak kabul edilir çünkü) veya, gerçekten, DATETIME dönüştürülür olsun demek ya da bir tarih olarak (LHS bir DATETIME sütun olduğu için) yazdı ifadeler DATETIME olarak ele alırım ÜSÖ maç için bir dize? LHS bir TARİH dönüştürülür ise 28 üzerinde herhangi bir zaman aralığında gelirdi çünkü 21 den 27 kadar her şeyi istediğiniz gibi görünüyor, oysa, bir fark olur. Açıkça atmalarını ile türlerini fixup yoksa ne olur?

Ayrıca, MySQL sunucu sizinle aynı zaman diliminde çalışıyor? Eğer görme ve günün anma sonu ne arasında bir 'off-by-bir-saat' fark var gibiydi? Ben hala o (yanlış) çalışma olabilir tam olarak emin değilim, ama bu faktörü için bir başka hesaba olabilir.