首页 > 解决方案 > 在日期列中使用 varchar 数据类型按日期分组

问题描述

以下查询的数据表:
以下查询的数据表

SELECT delivery_datetime,SUM(total_bill)
FROM `load_information`
WHERE status='Delivered' AND
      delivery_datetime BETWEEN '04-01-2021' AND '04-31-2021'
GROUP BY delivery_datetime
HAVING delivery_datetime BETWEEN '04-01-2021' AND '04-31-2021' ORDER BY delivery_datetime ASC</pre>

load_information表结构

姓名 | 类型 | 整理
交货日期时间 | varchar(255) | latin1_swedish_ci
总帐单 | 浮动(10,2)

我无法将我的delivery_datetime数据类型更改为date()或其他任何内容,但我需要按delivery_datetimetotal_bill列的SUM进行分组。

标签: mysqlsql

解决方案


如果您无法将delivery_datetime 转换为日期格式,那么当您尝试在日期操作中使用它时,将会招致显着的性能损失:它不能使用索引并且需要对整个表应用转换函数。话虽如此,这应该做你想做的事:

SELECT str_to_date(delivery_datetime,'%m-%d-%Y') as delivery,SUM(total_bill) 
FROM `load_information` 
WHERE status = 'Delivered' and str_to_date(delivery_datetime,'%m-%d-%Y') BETWEEN '2021-03-01' AND '2021-04-30' 
GROUP BY 1 ORDER BY 1 ASC;

推荐阅读