试图找到两个日期之间的记录

时间:2012-01-11 00:27:59

标签: php mysql sql

我的查询看起来像这样

WHERE `Project`.`user_id` = 9 
  AND `Project`.`project_status` = 1 
  AND `Project`.`project_type_id` = 4
  AND `Project`.`approval_date` >= '01/08/2012' 
  AND `Project`.`approval_date` <= '01/12/2012'

我确实有一个符合此条件的记录,我实际上是根据其中一条记录创建了查询,但它没有返回。我真的不想使用BETWEEN,因为应用程序可以使用开始日期或结束日期

5 个答案:

答案 0 :(得分:2)

您应该使用STR_TO_DATE()

将'01 / 08/2012'和'01 / 12/2012'转换为MySQL日期/时间值

e.g。

STR_TO_DATE('01/08/2012', '%d/%m/%Y')

答案 1 :(得分:1)

那真的只是查询的一部分 - 任何,“之间”的工作方式与你所暗示的不同 - 这里是MySQL手册的摘录:

  

•expr BETWEEN min AND max如果expr大于或等于min和   expr小于或等于max,BETWEEN返回1,否则返回1   返回0.这相当于表达式(min&lt; = expr AND expr   &lt; = max)如果所有参数都是相同的类型。否则输入   转换根据章节中描述的规则进行   11.2,“表达式评估中的类型转换”,但适用于所有三个参数。

除了“approval_date”列的数据类型之外还有什么?

答案 2 :(得分:1)

这看起来好像应该乍一看,但是你提供的值不是有效的日期时间。试试这个

WHERE `Project`.`user_id` = 9 
AND `Project`.`project_status` = 1 
AND `Project`.`project_type_id` = 4
AND `Project`.`approval_date` >= '2012-01-08 00:00:00' 
AND `Project`.`approval_date` <= '2012-01-12 00:00:00'

答案 3 :(得分:0)

您仍然可以使用BETWEEN

WHERE `Project`.`user_id` = 9 
AND `Project`.`project_status` = 1 
AND `Project`.`project_type_id` = 4
AND (`Project`.`approval_date` BETWEEN '2012-01-08 00:00:00' AND '2012-01-12 23:59:59')

答案 4 :(得分:0)

我的主要问题是将字符串格式化为datetime。 kissmyface在正确构造它是正确的,所以mysql可以理解。所以我在发送之前使用php进行转换。

"Project.approval_date >= '".date("Y-m-d H:i:s", strtotime($start))."'";
"Project.approval_date <= '".date("Y-m-d H:i:s",strtotime($end))."'";

这几乎是我的解决方案。除非有人知道在mysql端做同样的事情。