MYSQL select 查询 return 月份列表作为 start/end 日期之间的字符串
MYSQL select query return list of months as string from between start/end date
合同中有两个主要字段 Startdate 和 Enddate table 我想将结果作为名为 description 的额外列来表示合同开始和结束之间的月份。请参阅下面的 table 和我需要的结果
Table : Contracts
------------------------------
ID | START | END |
------------------------------
1 | 2016-05-01 | 2016-07-31 |
2 | 2016-04-01 | 2016-08-31 |
3 | 2016-01-22 | 2016-02-25 |
------------------------------
这里我需要根据下面的格式得到结果,一个额外的字段代表使用 SELECT 查询的合同开始日期和结束日期之间的 range/list 个月。
Result (as per give format)
----------------------------------------------------------------------------------------
ID | START | END | Description
----------------------------------------------------------------------------------------
1 | 2016-05-01 | 2016-07-31 | May-2016, Jun-2016, July-2016
2 | 2016-04-01 | 2016-07-31 | April-2016, May-2016, Jun-2016, July-2016
3 | 2016-01-22 | 2016-02-25 | January-2016, February-2016
----------------------------------------------------------------------------------------
上面的示例第一行 table 开始日期是 2016-05-01 (2016-May-01),结束日期是 2016-07-31 (2016-July-31) 所以这里给出了列表5 月 1 日至 7 月 31 日之间的月份和年份,因此描述将是 2016 年 5 月、2016 年 6 月、2016 年 7 月。
我尝试了很多查询仍然无法获得准确的 SQL 查询。
不知道如何做才能得到相同的结果,
有什么建议吗
提前致谢
下面的查询应该可以解决问题。
你的第二行输入和输出数据不同,我有运行输出数据
select id, DATE_FORMAT(start_Date, '%Y-%c-%d') as Start_Date,
DATE_FORMAT(end_date,'%Y-%c-%d') as END_Date,
group_concat( distinct(DATE_FORMAT(aDate, '%Y %M '))) as Descp
from (
select ss.end_date - interval (a.a ) month as aDate from
(select 0 as a union all select 1 union all select 2 union all select 3
union all select 4 union all select 5 union all select 6 union all
select 7 union all select 8 union all select 9) a, Contracts ss
) mon, Contracts sa
where aDate between sa.start_date and sa.end_date
group by id;
合同中有两个主要字段 Startdate 和 Enddate table 我想将结果作为名为 description 的额外列来表示合同开始和结束之间的月份。请参阅下面的 table 和我需要的结果
Table : Contracts ------------------------------ ID | START | END | ------------------------------ 1 | 2016-05-01 | 2016-07-31 | 2 | 2016-04-01 | 2016-08-31 | 3 | 2016-01-22 | 2016-02-25 | ------------------------------
这里我需要根据下面的格式得到结果,一个额外的字段代表使用 SELECT 查询的合同开始日期和结束日期之间的 range/list 个月。
Result (as per give format) ---------------------------------------------------------------------------------------- ID | START | END | Description ---------------------------------------------------------------------------------------- 1 | 2016-05-01 | 2016-07-31 | May-2016, Jun-2016, July-2016 2 | 2016-04-01 | 2016-07-31 | April-2016, May-2016, Jun-2016, July-2016 3 | 2016-01-22 | 2016-02-25 | January-2016, February-2016 ----------------------------------------------------------------------------------------
上面的示例第一行 table 开始日期是 2016-05-01 (2016-May-01),结束日期是 2016-07-31 (2016-July-31) 所以这里给出了列表5 月 1 日至 7 月 31 日之间的月份和年份,因此描述将是 2016 年 5 月、2016 年 6 月、2016 年 7 月。
我尝试了很多查询仍然无法获得准确的 SQL 查询。
不知道如何做才能得到相同的结果,
有什么建议吗
提前致谢
下面的查询应该可以解决问题。
你的第二行输入和输出数据不同,我有运行输出数据
select id, DATE_FORMAT(start_Date, '%Y-%c-%d') as Start_Date,
DATE_FORMAT(end_date,'%Y-%c-%d') as END_Date,
group_concat( distinct(DATE_FORMAT(aDate, '%Y %M '))) as Descp
from (
select ss.end_date - interval (a.a ) month as aDate from
(select 0 as a union all select 1 union all select 2 union all select 3
union all select 4 union all select 5 union all select 6 union all
select 7 union all select 8 union all select 9) a, Contracts ss
) mon, Contracts sa
where aDate between sa.start_date and sa.end_date
group by id;