问题描述
请在我的代码下方找到。我正在使用 2012 年的连接和过滤数据加入 3 个表,以查看今年的总销售额。请不要将销售表中的 sales_date 列定义为 varchar(格式 = mm/dd/yyyy)
SELECT country.name,parts.name,SUM(parts.price * sales.quantity) AS total_sales
FROM sales JOIN country ON country.id=sales.country_id
JOIN parts ON parts.id=sales.model_id
WHERE sales.sales_date between '1/1/2012' and '12/31/2012'
GROUP BY country.name,parts.name
ORDER BY total_sales asc;
以上查询为我提供了所有结果,而不是针对特定年份进行过滤。如果您有任何问题,请告诉我
解决方法
我的建议是修复数据!日期应使用本机日期/时间格式存储。并且可以(通常)修复损坏的数据。
如果这是不可能的,那么您可以使用字符串操作来获取年份。在这种情况下,like
执行您想要的操作:
where sales.sales_date like '%2012'
请勿对 LIKE
/date
数据使用 datetime
!。它是为字符串而设计的,在这里你是在字符串上使用它。
要修复您的数据,您可以执行以下操作。
首先,将日期放入正确的 YYYY-MM-DD 格式:
update sales
set sales_date = str_to_date(sales.date,'%m/%d/%Y');
然后修改列:
alter table sales modify column sales_date date;