需要帮助过滤 table 中特定年份的数据,但日期定义为 varchar。如何编写我的连接查询?
need help to filter data for a specific year in a table however date defined as varchar. how to write my join query?
请在下面找到我的代码。我加入 3 table 使用 2012 年的加入和过滤数据来查看今年的总销售额。请不要将 sales table 中的 sales_date 列定义为 varchar (format = 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;
以上查询为我提供了所有结果,而不是针对特定年份进行过滤。如果您有任何问题,请告诉我
我的建议是修复数据!日期应使用本机 date/time 格式存储。并且可以(经常)修复损坏的数据。
如果这不可能,那么您可以使用字符串操作来获取年份。在这种情况下,like
做你想做的事:
where sales.sales_date like '%2012'
不要在 date
/datetime
数据上使用 LIKE
!。它是为字符串设计的,在这里你在字符串上使用它。
要修复您的数据,您可以执行以下操作。
首先,将日期设置为正确的 YYYY-MM-DD 格式:
update sales
set sales_date = str_to_date(sales.date, '%m/%d/%Y');
然后修改列:
alter table sales modify column sales_date date;
请在下面找到我的代码。我加入 3 table 使用 2012 年的加入和过滤数据来查看今年的总销售额。请不要将 sales table 中的 sales_date 列定义为 varchar (format = 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;
以上查询为我提供了所有结果,而不是针对特定年份进行过滤。如果您有任何问题,请告诉我
我的建议是修复数据!日期应使用本机 date/time 格式存储。并且可以(经常)修复损坏的数据。
如果这不可能,那么您可以使用字符串操作来获取年份。在这种情况下,like
做你想做的事:
where sales.sales_date like '%2012'
不要在 date
/datetime
数据上使用 LIKE
!。它是为字符串设计的,在这里你在字符串上使用它。
要修复您的数据,您可以执行以下操作。
首先,将日期设置为正确的 YYYY-MM-DD 格式:
update sales
set sales_date = str_to_date(sales.date, '%m/%d/%Y');
然后修改列:
alter table sales modify column sales_date date;