2017-06-08 41 views
0

我想在mysql中做两列计数。其中一列是一个字符串,但另一个是像06/08/2017的日期,当我做我的查询时,我得到0结果。我怎样才能在mysql中做两列的计数?

SELECT count(*) FROM `castigos` WHERE inicio_normal=05/06/2017 AND cod_emplazamiento=1

我有一个数据项,但其不要告诉我任何事情。也许日期中的数据类型是错误的?

我该怎么办? enter image description here

回答

0

将日期字段添加到您的选择和分组中。否则,mysql扩展不能识别你想按日期分组,并将所有结果聚合成1列。而且,因为你得到0计数,所以你是where子句不能工作的地方。

您的日期格式似乎格式不正确。通常为YYYY/MM/DD格式(标准格式); 或指定使用SELECT STR_TO_DATE('17/09/2010','%d/%m/%Y');

MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

下面的格式使用隐式转换和默认的日期格式字符串日期转换为有效日期。

SELECT inicio_normal, count(*) 
FROM `castigos` 
WHERE inicio_normal='2017/05/06' 
    AND cod_emplazamiento=1 
GROUP BY inicio_normal 

否则它将数学计算并将该日期与该日期存储的数字进行比较。

理解日期应该存储在日期数据类型中,并且当您查询日期时,您正在将字符串转换为日期数据类型进行比较。所以你需要使用标准格式,或者将字符串强制转换为日期,以便数据库引擎知道如何将格式转换为日期。

0

试试这个:

SELECT count(*) FROM `castigos` WHERE inicio_normal="05/06/2017" AND cod_emplazamiento=1 GROUP BY inicio_normal 
+0

需要处理的事实,即mySQL将只返回1行,因为没有分组。预期结果显示数据中每个日期的计数。 – xQbert

+0

是的,你正在写...编辑我的答案。 –

0

WHERE inicio_normal为05/06/2017年

如果您除以6 3,那么2017年你会得到一个非常小的值的确。 OTOH如果您reformat this as a date(例如20170605,如果您给了我们欧洲格式化日期 - dd/mm/yyyy),那么您的查询将查找您向我们显示的行。