使用MySQL语法并使用包含以下行的表:
mydate DATETIME NULL,
有没有办法做类似的事情:
... WHERE mydate<='2008-11-25';
我正在尝试,但并没有真正让它发挥作用。
答案 0 :(得分:19)
呃,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';
答案 1 :(得分:9)
没关系找到答案。对于愿意回复的人来说也是如此。
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
答案 2 :(得分:7)
在标准SQL语法中,您将使用:
WHERE mydate <= DATE '2008-11-20'
也就是说,关键字DATE应该在字符串之前。但是,在某些DBMS中,您不需要那么明确;系统会自动将DATE列转换为字符串,或将字符串转换为DATE值。如果将DATE转换为字符串,则名义上会有一些有趣的含义 - 如果您碰巧在第一个千年(0001-01-01 .. 0999-12-31)中有日期,并且前导零(es)被省略格式化系统。
答案 3 :(得分:1)
您可以添加时间组件
WHERE mydate<='2008-11-25 23:59:59'
但是如果mydate是'2008-11-25 24:59:59',那么在DST切换日期可能会失败,所以在下一个日期之前抓住所有东西可能是最安全的:
WHERE mydate < '2008-11-26 00:00:00'
答案 4 :(得分:0)
您的问题可能是您正在处理DATETIME数据,而不仅仅是日期。如果某行的mydate为'2008-11-25 09:30 AM',则您的 WHERE mydate&lt; ='2008-11-25'; 不会返回该行。 '2008-11-25'的隐含时间为00:00(午夜),因此即使日期部分相同,它们也不相等,并且mydate更大。
如果你使用&lt; '2008-11-26'而不是&lt; =''2008-11-25',那会奏效。 Datediff方法有效,因为它仅比较日期部分,并忽略时间。