2016-12-05 61 views
-2

我有一列ifd0_DateTime,在名为photo的表中,其中包含以下格式的日期时间:1966:12:22 17:19:57。 我需要计算每年明智的照片数量。以正确的格式从SQL查询获取日期时间

到目前为止,我有这个查询。但它不能正常工作。

SELECT ifd0_DateTime, count(*) FROM photo group by YEAR(ifd0_DateTime), MONTH(ifd0_DateTime);

任何人都可以请解决这一问题?

+0

您的查询如何不起作用? –

+0

我稍后修复它。 – piyush121

+0

为什么downvotes?我应该删除这个问题吗? – piyush121

回答

2
SELECT STR_TO_DATE(LEFT(ifd0_DateTime, 7), '%Y:%m'), 
     COUNT(*) AS dateCnt 
FROM photo 
GROUP BY STR_TO_DATE(LEFT(ifd0_DateTime, 7), '%Y:%m') 
+0

错误代码:1582.调用本地函数'STR_TO_DATE'时参数计数不正确 – piyush121

+0

@ piyush121缺少逗号。 –

+0

完美地工作。你也可以得到我的投票! – piyush121

1

代替date选择YearMonth

试试这个

SELECT YEAR(ifd0_DateTime), MONTH(ifd0_DateTime), count(*) 
FROM photo 
group by YEAR(ifd0_DateTime), MONTH(ifd0_DateTime) 
+0

任何downvote的原因:/ –

0
SELECT YEAR(ifd0_DateTime), MONTH(ifd0_DateTime), count(*) FROM photo 
group by YEAR(ifd0_DateTime), MONTH(ifd0_DateTime); 

你的意思是?

1

存储日期时间的正确方法是使用内置数据类型。但是,它看起来像是将值存储为字符串。如果是这样,你只想要前7个字符:

SELECT LEFT(ifd0_DateTime, 7) as yyyymm, count(*) 
FROM photo 
GROUP BY LEFT(ifd0_DateTime, 7) 
ORDER BY yyyymm; 

但是,你真的应该修复数据。

+0

失败的可怕。它已经是日期时间格式了。 – piyush121

+2

@ piyush121。 。 。鉴于你*接受了*在数值上使用'LEFT()'的答案,很难相信它已经处于“日期时间格式”。你明白字符串和'datetime'之间的区别吗?如果它是'datetime',你为什么接受一个把它当作字符串的答案? –

+0

我可能是错的。我以为你问的是,如果它是一个有效的日期时间。但是你的查询给出了模糊的结果。 – piyush121