在我的销售表中有日期列,日期格式为2018年1月9日,下午5:06。我怎样才能使用MySQL专门获得2018年1月份的所有销售额?
答案 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()
函数会在给出DATE
或DATE
值的情况下为您提供当月的最后DATETIME
。
答案 2 :(得分:0)
自
日期格式为2018年1月9日,下午5:06
这是not recognizable time format for MySQL我相信解决方案是:
SELECT * FROM table WHERE date like 'January%2018%';
我知道这不是一个&#34;最佳实践&#34;以及以错误的类型存储时间。