尽管在数据库中存在,但获得null结果

时间:2015-12-21 15:07:16

标签: mysql

这里,我使用mysql查询,因为它显示空结果或空结果,尽管数据库中有记录。 那么,实际问题在哪里呢?

SELECT `fx_tasks`.*, `fx_assign_tasks`.`assigned_user` 
FROM (`fx_tasks`) 
LEFT JOIN `fx_assign_tasks` 
  ON `fx_assign_tasks`.`task_assigned` = `fx_tasks`.`t_id` 
WHERE `fx_tasks`.`project` = 55 
  AND str_to_date(`fx_tasks`.`start_date`, "%d-%m-%Y") 
      BETWEEN "08-09-2015" AND "28-09-2015" 
ORDER BY `fx_tasks`.`t_id` DESC

2 个答案:

答案 0 :(得分:2)

问题可能出在str_to_date(fx_tasks.start_date, "%d-%m-%Y") BETWEEN "08-09-2015" AND "28-09-2015" 部分(尽管不是双引号)。 fx_tasks转换为日期,在mysql中为YYYY-MM-DD格式,然后将其与包含不同格式的日期的字符串进行比较。没有记录符合这一标准。

将上述标准中的日期更改为YYYY-MM-DD格式:

start_date

答案 1 :(得分:1)

MySQL中的日期需要采用Y-m-d格式。

str_to_date(`fx_tasks`.`start_date`, "%d-%m-%Y") 
    BETWEEN "2015-09-08" AND "2019-09-28"

来自文档(http://dev.mysql.com/doc/refman/5.5/en/datetime.html):

  

DATE类型用于具有日期部分但没有时间部分的值。 MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。

当您使用str_to_date时,它使用格式字符串解析来自db的值,然后以DATE格式返回Y-m-d

P.S。如果fx_tasks.start_date已经已经 DATE类型,那么您就不需要str_to_date

P.P.S。如果您想以其他格式打印DATE,请使用date_format()