簡體   English   中英

獲取給定日期范圍內的連續月份

[英]Get the consecutive months for a given date range

在我的桌子上,我的日期如下

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選擇所需的日期框架,該日期框架必須采用正確的日期格式。 當然,您必須將其適應於您的表格和列名

DBfiddle示例

首先,修復數據,使其使用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;

是db <>小提琴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM