在我的桌子上,我的日期如下
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
答案 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选择所需的日期框架,该日期框架必须采用正确的日期格式。当然,您必须将其适应您的表格和列名
答案 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 <>小提琴。