我想选择一个月内的所有记录。如:在数据库中,记录是日期
- 01/08/2014
- 02/08/2014
- 03/08/2014
- 04/08/2014
- 05/08/2014
- 14/08/2014
- 05/09/2014
- 16/09/2014
我想只选择01/08/2014到14/08/2014。我将查询写成
$result = mysql_query("SELECT t1.qty, t2.lastname, t2.firstname, t2.date, t3.name, t2.reservation_id, t2.payable FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation=t2.confirmation
INNER JOIN products AS t3
ON t1.room=t3.id
WHERE t2.date BETWEEN '$start' AND date'$end'
GROUP BY t2.confirmation") or die(mysql_error());
我得到的结果是日期
- 01/08/2014
- 02/08/2014
- 03/08/2014
- 04/08/2014
- 05/08/2014
- 14/08/2014
- 05/09/2014
它包括九月的日期。请帮助。
像这样使用str_to_date函数:
SELECT t1.qty,
t2.lastname,
t2.firstname,
t2.date,
t3.name,
t2.reservation_id,
t2.payable
FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation = t2.confirmation
INNER JOIN products AS t3
ON t1.room = t3.id
WHERE str_to_date(t2.date, '%d/%m/%Y') BETWEEN
str_to_date('$start', '%d/%m/%Y') AND
str_to_date('$end', '%d/%m/%Y')
我还去掉了你的GROUP BY子句。只能将GROUP BY子句与聚合函数结合使用。您没有使用任何聚合函数。
当然,最理想的做法是修改表以实际保存日期,而不是字符串。这样就可以查询而不必转换。您还可以直接索引日期列,而不必创建基于函数的索引。
如果t2。Date是datetime,你的查询是这样的
(t2的地方。日期介于"2014-08-01 00:00:00"answers"2014-09-01"之间就是')
如果t2。日期是varchar或文本,你的查询是这样的
t2的地方。CAST('2014-08-01')与CAST('2014-09-01')之间的日期
日期);
WHERE t2.date BETWEEN '$start' AND date'$end'
这个date'$end'
看起来不好。解决它。你的t2.date
场是什么类型的?
更新:如果你只需要月份信息,那么你可以使用你的varchar字段LIKE '%/08/2014'条件。另一种方法是使用STR_TO_DATE(str,fmt),您的条件将是STR_TO_DATE(t2.date,'%d/%m/%Y') BETWEEN STR_TO_DATE('$start','%d/%m/%Y') AND STR_TO_DATE('$end','%d/%m/%Y')
一个简单的解决方案是使用LIKE操作符。
像"%/08/2014"
,
$result = mysql_query("SELECT t1.qty, t2.lastname, t2.firstname, t2.date, t3.name, t2.reservation_id, t2.payable FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation=t2.confirmation
INNER JOIN products AS t3
ON t1.room=t3.id
WHERE t2.date LIKE '%/08/2014'
GROUP BY t2.confirmation") or die(mysql_error());
如果你没有改变MYSql的配置,日期格式应该是YYYY-MM-DD所以它会变成
像2014 - 08 - %的
希望有帮助!
快乐编码!!
这适用于我,如果"t2 "。date"字段是TIMESTAMP:
"... WHERE DATE(t2.date) BETWEEN '{$start}' AND '{$end}' "