2015-12-21 65 views
1

在这里,我使用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 
+0

始终使用单引号'BETWEEN '08 -09-2015' 和'28 -09-2015''和'STR_TO_DATE (\'fx_tasks \'。''start_date \','%d-%m-%Y')' –

+1

@JorgeCampos:MySQL中单引号和双引号之间*没有区别。 –

+2

@RocketHazmat那么,这取决于mysql配置(设置了ANSI_QUOTES sql模式,然后将双引号解释为标识符,而不是字符串分隔符)。 – Shadow

回答

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已经 a DATE类型,那么你不需要str_to_date

P.P.S.如果您想以不同的格式打印DATE,请使用date_format()

+0

谢谢Rocket ..但如果有像日期记录,如“08-09-2015”...? –

+0

感谢Rocket ..但是如果有像“08-09-2015”这样的日期记录...? –

+1

然后您需要将您的varchar记录转换为实际的日期/时间字段并正确格式化它们。你永远不应该把日期存储为字符串类型。对于日期数学来说,字符串本质上是无用的,这就是你需要做的 - 数学计算。 –

2

问题可能与str_to_date(fx_tasks有关。 “%d-%m-%Y”)BETWEEN“08-09-2015”和“28-09-2015”部分(不包括双引号)。将start_date转换为日期,该日期在mysql中采用YYYY-MM-DD格式,然后将其与包含日期格式不同的字符串进行比较。没有记录能够满足这个标准。

更改日期在上述标准,以YYYY-MM-DD格式:

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