进行一次查询,从我的销售表中获取特定月份

时间:2018-01-21 17:36:52

标签: mysql

在我的销售表中有日期列,日期格式为2018年1月9日,下午5:06。我怎样才能使用MySQL专门获得2018年1月份的所有销售额?

3 个答案:

答案 0 :(得分:1)

假设您的日期列是日期数据类型列,您可以使用year()和month()函数

select * from my_table 
where year(my_date_col) = 2018
and month(my_date_col) = 1

答案 1 :(得分:0)

由于该列尚未采用DATE格式,因此我们假设它必须保留其当前格式以用于应用目的,并添加辅助DATE列选择开(因为SELECT将以这种方式更优化)。

首先我们添加一个VIRTUAL列(需要MySQL 5.7+),这是一个在运行时计算但未存储在磁盘上的计算列。我们不需要将此列存储在磁盘上,因为我们稍后会将其编入索引。我们的VIRTUAL列会将申请日期的格式转换为MySQL DATE

str_date替换为您当前的日期列:

ALTER TABLE `my_table`
ADD `virtual_date` DATETIME AS (STR_TO_DATE(`str_date`, '%M %d, %Y, %l:%i %p')) VIRTUAL AFTER `date`;

现在添加INDEX

ALTER TABLE my_table ADD INDEX (`virtual_date`);

现在我们可以执行正确编入索引的SELECT

SELECT *
FROM my_table
WHERE virtual_date >= '2018-01-01'
AND virtual_date <= '2018-01-31'

SELECT *
FROM my_table
WHERE virtual_date >= '2018-01-01'
AND virtual_date <= LAST_DAY('2018-01-01')

MySQL DATE格式为YYYY-MM-DD。后一种查询在逻辑上更简单; LAST_DAY()函数会在给出DATEDATE值的情况下为您提供当月的最后DATETIME

答案 2 :(得分:0)

  

日期格式为2018年1月9日,下午5:06

这是not recognizable time format for MySQL我相信解决方案是:

SELECT * FROM table WHERE date like 'January%2018%';

我知道这不是一个&#34;最佳实践&#34;以及以错误的类型存储时间。