在SQL中如何比较日期值?

时间:2008-11-25 19:25:41

标签: sql mysql compare where

使用MySQL语法并使用包含以下行的表:

mydate DATETIME NULL,

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

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

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

5 个答案:

答案 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方法有效,因为它仅比较日期部分,并忽略时间。