获取给定日期范围内的连续月份

时间:2019-08-10 07:26:55

标签: 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   Sept
13/09/2011   Sept

2 个答案:

答案 0 :(得分:1)

基于您提供的数据

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选择所需的日期框架,该日期框架必须采用正确的日期格式。当然,您必须将其适应您的表格和列名

DBfiddle Example

答案 1 :(得分:0)

首先,修复数据,使其使用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;

Here是db <>小提琴。