2008-11-25 84 views
10

使用MySQL的語法和與像一排表:在SQL中如何比較日期值?

mydate DATETIME NULL, 

有沒有辦法做這樣的事情:

... WHERE mydate<='2008-11-25'; 

我想,但沒有真正得到它的工作。

回答

8

沒有找到答案。對於任何願意回覆的人來說都是一樣的。

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

不客氣;) – Arvo 2008-11-25 19:39:05

+3

這看起來很慢:函數調用和表中每一行的隱式轉換。必須有一種方法可以更直接地比較日期。 – 2008-11-25 20:10:35

+0

索引以這種方式未使用... – FerranB 2009-03-03 21:27:12

18

呃,WHERE mydate<='2008-11-25'來做到這一點。這應該工作。

您是否收到錯誤訊息?你使用的是MySQL的古老版本嗎?

編輯:以下爲我的作品罰款的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'; 
6

在標準的SQL語法,你可以使用:

WHERE mydate <= DATE '2008-11-20' 

也就是說,關鍵字日期應先於字符串。然而,在一些DBMS中,你並不需要那麼明確;系統會自動將DATE列轉換爲字符串或字符串轉換爲DATE值。如果DATE被轉換成字符串,名義上會有一些有趣的含義 - 如果您碰巧有第一個千年的日期(0001-01-01 .. 0999-12-31),並且前導零(es)被格式化系統。

0

您可以添加時間部分

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

但如果指明MyDate是「2008-11-25 24:59:59」,可能對DST轉換日期失敗,所以它可能是最安全的前抓住一切下一次日期:

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

您的問題可能是您正在處理DATETIME數據,而不僅僅是日期。如果一行的mydate是'2008-11-25 09:30 AM',那麼你的WHERE mydate < ='2008-11-25';不會返回該行。 '2008-11-25'的隱含時間爲00:00(午夜),所以儘管日期部分相同,但它們並不相等,且mydate較大。

如果您使用<'2008-11-26'而不是< ='2008-11-25',那就行了。 Datediff方法是可行的,因爲它只比較日期部分,並忽略時間。