2014-01-14 42 views
0

我有一個視圖,列出了來自在線日曆的可用日期(基本上,我創建了所有可用日期的條目,然後將其與已預訂的日期進行比較 - 視圖,則顯示所有日期「AvailableDates」,其中「日期」 <>「BookedDate」內。我的SQL - 從數據庫日期創建分組日期列表

到目前爲止,我可以讓它運行,看起來像這樣的列表....

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

.. ..但是這佔用了很多空間,並且想法是可以將該列表複製並粘貼到電子郵件/消息中以供快速參考。

我正在尋找一種方法來組的日期,以便輸出看起來像這樣...

Jan - 24th 
Feb - 7th, 8th 

...所以,有一個最大的12行是。

有人能告訴我該怎麼做? - 該字段是「日期」類型。

感謝,

達倫

回答

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
+0

輝煌帶電作業!這正是我所需要的! – dazzathedrummer

+0

對此還有一件事......結果顯示按字母順序排列的月份(四月,八月,十二月等) - 我如何以月份順序呈現它們? – dazzathedrummer

+0

在「GROUP BY」子句之後添加'ORDER BY YEAR(your_column),MONTH(your_column)'。 – fancyPants

0

你必須在datecolumn轉換爲一個月,並使用GROUP_CONCAT()。也許這可以工作,或者至少在正確的方向。

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

未能格式化DAY。現在已修復

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

SQLFiddle