Mysql - 从数据库日期创建分组数据列表

时间:2014-01-14 13:53:11

标签: mysql sql date

我有一个视图,列出在线日历中的可用日期(基本上,我创建了所有可用日期的条目,然后将其与已预订的日期进行比较 - 然后视图显示'AvailableDates'中的所有日期'日期'<>'BookedDate'。

到目前为止,我可以让它运行一个看起来像这样的列表....

24th January 2014
7th February 2014
8th February 2014

....但是这会占用大量空间,并且可以将列表复制并粘贴到电子邮件/消息中以供快速参考。

我正在寻找的是一种对日期进行分组的方法,以便输出看起来像这样......

Jan - 24th
Feb - 7th, 8th

...所以最多有12行。

有人能告诉我怎么做吗? - 该字段是“日期”类型。

谢谢,

的Darren

3 个答案:

答案 0 :(得分:2)

您可能也希望将年份放在那里,否则您可能会得到错误的结果。

SELECT 
YEAR(your_column) AS the_year, 
DATE_FORMAT(your_column, '%b') AS the_month_abbreviated, 
GROUP_CONCAT(DATE_FORMAT(your_column, '%D') ORDER BY DAY(your_column) SEPARATOR ', ') AS the_days
FROM your_table
GROUP BY YEAR(your_column), DATE_FORMAT(your_column, '%b')
ORDER BY YEAR(your_column), MONTH(your_column)
  • 您可以详细了解DATE_FORMAT()函数here
  • 看到它在 sqlfiddle
  • 中正常工作

答案 1 :(得分:0)

您必须将datecolumn转换为month并使用GROUP_CONCAT()。也许这可以起作用或者至少在正确的方向上起作用。

SELECT  
LEFT(monthname(datecolumn),3),GROUP_CONCAT(DAY(datecolumn))
FROM table
GROUP BY CONCAT(YEAR(datecolumn),MONTH(datecolumn))

错过格式化DAY。现在修好了

答案 2 :(得分:0)

SELECT
 MONTH(`d`),
 GROUP_CONCAT(DAY(`d`))
FROM
 a
GROUP BY
 YEAR(`d`),
 MONTH(`d`)

SQLFiddle