2008-11-25 17 views

cevap

8

Nevermind bir cevap buldu. Cevap vermek isteyen herkes için aynısını yap.

WHERE DATEDIFF(mydata,'2008-11-20') >=0; 
+0

Rica ederim;) – Arvo

+3

Bu yavaş görünüyor: Tablodaki her satır için işlev çağrısı ve örtülü dönüştürme. Tarihleri ​​daha doğrudan karşılaştırmanın bir yolu olmalı. –

+0

Dizinler bu şekilde kullanılmamaktadır ... – FerranB

18

Ah, WHERE mydate<='2008-11-25'bunu yapmanın yolu olduğunu. Bu işe yaramalı.

Hata mesajı alıyor musunuz? MySQL'in eski bir sürümünü mi kullanıyorsunuz?

Düzenleme: Aşağıdaki standart SQL sözdiziminde MySQL 5.x

create temporary table foo(d datetime); 
insert into foo(d) VALUES ('2000-01-01'); 
insert into foo(d) VALUES ('2001-01-01'); 
select * from foo where d <= '2000-06-01'; 
+0

PostgreSQL DBMS'mde gerçekten işe yarıyor. MySQL zayıflığı olabilir mi? – bortzmeyer

+0

Yup o mysql – fmsf

+1

Err çalışmıyor, o da MySQL üzerinde çalışır. :) Ben sadece deli olmadığından emin olmak için denedim. MySQL'in hangi sürümü fmfs kullanıyorsunuz? bir hata alıyor musun? – Eli

6

benim için gayet iyi çalışıyor, istersek:

olduğunu
WHERE mydate <= DATE '2008-11-20' 

, anahtar kelime TARİH dize öncesinde gerekir . Bununla birlikte, bazı DBMS'de, bu açıklığa sahip olmanıza gerek yoktur; Sistem DATE sütununu otomatik olarak bir dizeye veya dizgeye DATE değerine dönüştürecektir. Eğer DATE bir dizgeye dönüştürülürse, bazı ilginç etkiler vardır - eğer ilk binyılda (0001-01-01 .. 0999-12-31) tarihler varsa ve baştaki sıfır (lar) biçimlendirme sistemi. Daha önce her şeyi kapmak için muhtemelen en güvenli yüzden

+0

Tüm tarihlerin gösterildiği gibi ISO 8601 biçimindeyse, dize karşılaştırmaları çalışacağını unutmayın (bu, ISO 8601'in bir özelliğidir). – bortzmeyer

+0

Eğer baştaki sıfırlar dahil ise, evet.Teoride, 1000-01-01 tarihinden önce bir tarihiniz varsa, DBMS önde gelen sıfırları göz ardı edebilir. Çok muhtemel olduğundan emin değilim, ama komik şeyler biliniyordu. Oracle BCE (BC) tarihlerini destekler; Bunlar dizgiler olarak güvenilir bir şekilde karşılaştırmazlar. –

0

, Sen zaman bileşeni

WHERE mydate<='2008-11-25 23:59:59' 

eklemek olabilir ama mydate '2008-11-25 24:59:59' ise o DST geçiş tarihlerde başarısız olabilir sonraki tarihler:

WHERE mydate < '2008-11-26 00:00:00' 
0

Sorununuz, yalnızca tarihleri ​​değil, DATETIME verileriyle uğraşmak olabilir. Bir satırın '2008-11-25 09:30 AM' olduğu bir tarih varsa, WHERE mydate < = '2008-11-25'; bu satırı döndürmeyecek. '2008-11-25' 00:00 (gece yarısı) 'nın zımni bir zamanına sahiptir, bu yüzden tarih kısmı aynı olsa bile, eşit değildir ve benimki daha büyüktür.

< '2008-11-26' yerine < = '2008-11-25' kullanırsanız, bu işe yarar. Datediff yöntemi, sadece tarih bölümünü karşılaştırdığı ve zamanları göz ardı ettiği için çalışır.

İlgili konular