Mysql 获取给定日期范围的连续月份
在我的表格中,日期如下Mysql 获取给定日期范围的连续月份,mysql,sql,database,Mysql,Sql,Database,在我的表格中,日期如下 08/08/2011 29/08/2011 30/08/2011 31/08/2011 12/09/2011 13/09/2011 23/10/2011 24/10/2011 25/10/2011 26/10/2011 现在,我需要根据给定的日期范围显示记录,例如:如果起始日期为8/08/2011,而截止日期为20/10/2011,则数据如下所示 29/08/2011 Aug 30/08/2011 Aug 31/08/2011 Aug 12/09/2011
08/08/2011
29/08/2011
30/08/2011
31/08/2011
12/09/2011
13/09/2011
23/10/2011
24/10/2011
25/10/2011
26/10/2011
现在,我需要根据给定的日期范围显示记录,例如:如果起始日期为8/08/2011
,而截止日期为20/10/2011
,则数据如下所示
29/08/2011 Aug
30/08/2011 Aug
31/08/2011 Aug
12/09/2011 Sept
13/09/2011 Sept
根据你提供的数据
CREATE TABLE notes
(`datecreated` varchar(10))
;
INSERT INTO notes
(`datecreated`)
VALUES
('08/08/2011'),
('29/08/2011'),
('30/08/2011'),
('31/08/2011'),
('12/09/2011'),
('13/09/2011'),
('23/10/2011'),
('24/10/2011'),
('25/10/2011'),
('26/10/2011')
;
你可以用
Select
STR_TO_DATE(datecreated, '%d/%c/%Y') datecreated
, DATE_FORMAT(STR_TO_DATE(datecreated, '%d/%c/%Y'),'%b') monthname
From notes
WHERE
STR_TO_DATE(datecreated, '%d/%c/%Y') BETWEEN '2011-08-29' AND '2011-09-13';
结果是
datecreated monthname
2011-08-29 Aug
2011-08-30 Aug
2011-08-31 Aug
2011-09-12 Sep
2011-09-13 Sep
最大的问题是你的日期不是mysql可以导入的格式。
但是有了STR_TO_DATE,你可以解决这个问题。
可以看到,日期问题一直困扰着mysql。
WHERE子句使用BETWEEN来选择所需的日期框架,该框架必须采用正确的日期格式。当然,你必须把它与你的tablebane和columnname联系起来
首先,修复数据,使其使用存储日期的正确格式
date
:
update notes
set datecreated = str_to_date(datecreated, '%d/%m/%Y');
alter table notes modify column datecreated date;
select *
from notes;
然后,如果要对数据进行排序,只需使用:
order by datecreated;
如果您想要精确的结果集:
select datecreated, left(monthname(datecreated), 3)
from notes
where datecreated < '2011-10-01'
order by datecreated;
选择datecreated,左侧(monthname(datecreated),3)
从笔记
创建日期在哪里<'2011-10-01'
按日期创建订单;
是一个dbfiddle。使用日期数据类型存储日期。然后回到我们这里。另外,我不理解在这种情况下的“连续性”,这只是一个糟糕的想法。甚至都不要娱乐它。只需确定日期。