通过MySQL在日期之前选择行

时间:2014-08-11 15:11:16

标签: mysql database

我有以下查询:

SELECT from_unixtime(o.date_created, '%Y-%m-%d') AS date_created, op.*
FROM order_product op
WHERE o.date_created > '2009-01-01';

这应该运行2009年1月1日之后的所有订单,但是如果我在2009年之前和之后的行中运行那么?

我犯了什么错误?

3 个答案:

答案 0 :(得分:3)

看起来o.date_created是unix时间,而不是你想要查询的格式。

尝试

WHERE o.date_created > unix_timestamp('2009-01-01');

答案 1 :(得分:2)

以防万一有人偶然发现这一点,并认为接受的答案是使其发挥作用的唯一方法。

原始比较将非常有效:

 WHERE date_created > '2009-01-01'

前提是date_created类型为TIMESTAMP而非INT假装为时间戳。

MySQL非常聪明,能够将'2009-01-01'转换为TIMESTAMP进行比较。 (作为免责声明,如果默认日期格式被篡改,这可能会中断,但我不相信)。

作为旁注,我还会将from_unixtime(date_created, '%Y-%m-%d')更改为DATE(date_created),因为它似乎会返回NULL

答案 2 :(得分:0)

您似乎需要检查数据库的区域设置配置,因为默认日期格式可能因安装而异(例如:yyyy-mm-dd,mm-dd-yyyy,dd-mm-yyyy )。

明确定义日期格式可能更安全,例如:

WHERE to_char(o.date_created,' yyyy-mm-dd')> ' 2009-01-01'

格式(o.date_created,' YYYY-MM-DD')> ' 2009-01-01'

请使用数据库类型(mysql)上可用的相应日期格式功能。