我有以下查询:
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年之前和之后的行中运行那么?
我犯了什么错误?
答案 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)上可用的相应日期格式功能。