繁体   English   中英

MySQL计数元素并按日期分组,忽略时间

[英]MySQL count elements and group by date, ignore time

我有一个存储支付交易的表。 它们以这种方式与日期时间一起存储:

day-month-year hour:min:sec (Example: 18-11-2019 11:54:41)

我想计算每天有多少交易。

如果我使用这个查询:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY paid

它每一行都返回我,但我想按日期分组,忽略时间。

如果您的列在实际DATETIME ,则DATE函数应该执行以下操作:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(paid)

如果它是具有自定义格式的VARCHARTEXT ,例如您指定的示例 ( 18-11-2019 11:54:41 ),您需要先使用STR_TO_DATE解析它:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(STR_TO_DATE(paid, '%d-%m-%Y %H:%i:%s'))

您应该始终使用DATETIME列格式来存储日期,而不是VARCHAR 您始终可以在应用程序层中处理表示问题(例如转换为欧洲格式)。 如果是这种情况,您可以简单地按GROUP BY DATE(paid)

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY DATE(paid)

如果您的列是VARCHARTEXT您需要将其转换为可以分组的值。 如果格式是DD-MM-YYYY ,您可以简单地使用LEFT(paid, 10)来提取日期部分并按其分组,即

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY LEFT(paid, 10)

如果您将日期存储为DM-YYYY ,则需要使用STR_TO_DATE转换它们,例如

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY STR_TO_DATE(paid, '%e-%c-%Y')

请注意,您可以在转换时忽略值的时间部分,从而避免使用DATE函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM