[英]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選擇所需的日期框架,該日期框架必須采用正確的日期格式。 當然,您必須將其適應於您的表格和列名
首先,修復數據,使其使用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.