使用MySQL的語法和與像一排表:在SQL中如何比較日期值?
mydate DATETIME NULL,
有沒有辦法做這樣的事情:
... WHERE mydate<='2008-11-25';
我想,但沒有真正得到它的工作。
使用MySQL的語法和與像一排表:在SQL中如何比較日期值?
mydate DATETIME NULL,
有沒有辦法做這樣的事情:
... WHERE mydate<='2008-11-25';
我想,但沒有真正得到它的工作。
沒有找到答案。對於任何願意回覆的人來說都是一樣的。
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
呃,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';
在標準的SQL語法,你可以使用:
WHERE mydate <= DATE '2008-11-20'
也就是說,關鍵字日期應先於字符串。然而,在一些DBMS中,你並不需要那麼明確;系統會自動將DATE列轉換爲字符串或字符串轉換爲DATE值。如果DATE被轉換成字符串,名義上會有一些有趣的含義 - 如果您碰巧有第一個千年的日期(0001-01-01 .. 0999-12-31),並且前導零(es)被格式化系統。
您可以添加時間部分
WHERE mydate<='2008-11-25 23:59:59'
但如果指明MyDate是「2008-11-25 24:59:59」,可能對DST轉換日期失敗,所以它可能是最安全的前抓住一切下一次日期:
WHERE mydate < '2008-11-26 00:00:00'
您的問題可能是您正在處理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方法是可行的,因爲它只比較日期部分,並忽略時間。
不客氣;) – Arvo 2008-11-25 19:39:05
這看起來很慢:函數調用和表中每一行的隱式轉換。必須有一種方法可以更直接地比較日期。 – 2008-11-25 20:10:35
索引以這種方式未使用... – FerranB 2009-03-03 21:27:12