我的查询看起来像这样
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
,因为应用程序可以使用开始日期或结束日期
答案 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端做同样的事情。