17

使用 MySQL 语法并有一个包含如下行的表:

mydate DATETIME NULL,

有没有办法做类似的事情:

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

我正在尝试,但并没有真正让它发挥作用。

4

5 回答 5

26

嗯,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';
于 2008-11-25T22:33:27.670 回答
12

没关系找到答案。任何愿意回复的人都一样。

WHERE DATEDIFF(mydata,'2008-11-20') >=0;
于 2008-11-25T19:33:48.903 回答
12

在标准 SQL 语法中,您将使用:

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

也就是说,关键字 DATE 应该在字符串之前。但是,在某些 DBMS 中,您不需要那么明确。系统会自动将 DATE 列转换为字符串,或将字符串转换为 DATE 值。如果将 DATE 转换为字符串,名义上会有一些有趣的含义 - 如果您碰巧有第一个千年的日期 (0001-01-01 .. 0999-12-31) 并且前导零被省略格式化系统。

于 2008-11-25T22:55:33.460 回答
2

您可以添加时间组件

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

但是如果 mydate 是“2008-11-25 24:59:59”,那么在 DST 切换日期可能会失败,因此在下一个日期之前获取所有内容可能是最安全的:

WHERE mydate < '2008-11-26 00:00:00'
于 2008-11-26T06:17:20.663 回答
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 方法之所以有效,是因为它只比较日期部分,而忽略时间。

于 2008-11-26T06:50:22.550 回答