我的SQL查询有什么问题,我想从两个表中检索满足WHERE条件的数据
SELECT *, UNIX_TIMESTAMP(i.sent_date) AS udate
FROM ibc_sent_history as i INNER JOIN
ibc_messages as u
ON i.msg_ids = u.id
WHERE (i.sent_date >= '02-02-2013' AND i.sent_date <= '02-02-2014')
ORDER BY i.sent_date
LIMIT 200
答案 0 :(得分:1)
我不太了解MySQL,但在运行时使用SQL Fiddle:
CAST('2014-02-02' AS DATE)
当我跑步时,我得到了约会
CAST('02-02-2014' AS DATE)
我得到NULL
,所以您的日期格式似乎错了。
演示:SQL Fiddle
答案 1 :(得分:1)
假设您的ibc_sent_history.sent_date
数据类型是DATETIME,这里有一种重构此查询的方法。 (即使数据类型为DATE,这也会起作用)。您需要将日期输入字符串格式从02-02-2013
更改为更标准的'2014-02-02`(YYYY-MM-DD)。
SELECT whatever, whatever
FROM ibc_sent_history AS i
INNER JOIN ibc_messages AS u ON i.msg_ids = u.id
WHERE i.sent_date >= '2013-02-02'
AND i.sent_date < '2014-02-02' + INTERVAL 1 DAY
ORDER BY i.sent_date DESC
LIMIT 200
我更改了ORDER BY以包含DESC。这是为了返回最新的项目,而不是最旧的项目。如果那不是您所需要的,请取下DESC。
我更改了日期格式。
我将选择范围的结尾更改为
i.sent_date < '2014-02-02` + INTERVAL 1 DAY
那是因为
i.sent_date <= '2014-02-02`
将包含恰好在2014年2月2日午夜发生的项目,但不包括当天的任何其他项目。您可能想要的是在第二天发生但不包括午夜的物品。