带有日期范围的MySQL查询不返回任何结果

时间:2012-06-18 17:58:21

标签: php mysql date range

所以我从PHP做这个查询,并在这里听取确切的查询字符串:

SELECT * FROM `pdem_timesheet`.`tblMasterTimesheets` WHERE 
`pdem_timesheet`.`tblMasterTimesheets`.`username` = 'pdem' AND 
`pdem_timesheet`.`tblMasterTimesheets`.`date` >= '2012-05-09' AND 
`pdem_timesheet`.`tblMasterTimesheets`.`date` <= '2012-05-15' ORDER BY
`pdem_timesheet`.`tblMasterTimesheets`.`date` ASC 

看起来它应该对我来说是正确的(或多或少从我之前使用过的代码中复制它)。但是当我运行查询时,结果是空的。

如果我将查询更改为不是日期范围,而只是一天:

SELECT * FROM .... WHERE ...`date` = '2012-06-12' ....

它工作正常,返回它应该的结果。

我尝试过使用between关键字:

SELECT * FROM ... WHERE ...`date` BETWEEN [start] [end]

但它仍然没有返回......

有关如何让此查询返回结果的任何想法吗?

=== ANSWER ===

当你离开时:

var curr_date = now.getDate();
var curr_month = now.getMonth();
var curr_year = now.getFullYear();

由于某种原因,它返回月份 - 1。所以,如果现在的月份为6,则now.getMonth()将返回5 ...只需要在查询中添加1(希望我能早点看到)

3 个答案:

答案 0 :(得分:2)

您的查询似乎对我有用。

请参阅demo

我的查询

SELECT * FROM tblMasterTimesheets
WHERE 
username='pdem'
AND
date >= '2012-05-09' AND
date <= '2012-05-15'
ORDER BY date ASC

我认为,username的类型为varchar,而date的类型为timestampdatetime

答案 1 :(得分:2)

与Fahim Parkar类似,以下是使用BETWEEN语法的查询示例:http://sqlfiddle.com/#!2/0fcb5/4

听起来你的用户pdem不存在。

答案 2 :(得分:1)

确保:

  1. 实际上有一个结果应该在使用时返回 给定标准。确保DD-MM-YYYY语法正确并确保您知道哪个月是哪个号码(可能是05,6月是06)
  2. date的数据类型是日期     type,而不是通用text / varchar类型。您无法将varchar与&gt; =进行比较(至少不是您想要的方式。仅适用于日期类型)
  3. 正如法希姆所说,你的代码是正确的。它必须是表格中导致你的问题的东西。