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。

使用日期数据类型存储日期。然后回到我们这里。另外,我不理解在这种情况下的“连续性”,这只是一个糟糕的想法。甚至都不要娱乐它。只需确定日期。