使用 MySQL 语法并有一个包含如下行的表:
mydate DATETIME NULL,
有没有办法做类似的事情:
... WHERE mydate<='2008-11-25';
我正在尝试,但并没有真正让它发挥作用。
嗯,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';
没关系找到答案。任何愿意回复的人都一样。
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
在标准 SQL 语法中,您将使用:
WHERE mydate <= DATE '2008-11-20'
也就是说,关键字 DATE 应该在字符串之前。但是,在某些 DBMS 中,您不需要那么明确。系统会自动将 DATE 列转换为字符串,或将字符串转换为 DATE 值。如果将 DATE 转换为字符串,名义上会有一些有趣的含义 - 如果您碰巧有第一个千年的日期 (0001-01-01 .. 0999-12-31) 并且前导零被省略格式化系统。
您可以添加时间组件
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 方法之所以有效,是因为它只比较日期部分,而忽略时间。