【发布时间】:2020-09-29 09:35:13
【问题描述】:
我有以下 SQL 来输出漂亮的工作日期版本:
SELECT GROUP_CONCAT(day(tbl_contract_dates.date) SEPARATOR ', ') as days,
DATE_FORMAT(tbl_contract_dates.date, '%M') as month,
DATE_FORMAT(tbl_contract_dates.date, '%Y') as year
FROM tbl_contract_dates
WHERE tbl_contract_dates.contract_id = 34
GROUP BY DATE_FORMAT(tbl_contract_dates.date, '%M %Y')
ORDER BY tbl_contract_dates.date;
这将输出如下内容:
+--------------------+-----------+------+
| days | month | year |
+--------------------+-----------+------+
| 8, 10, 11, 12, 16 | August | 2020 |
| 20, 27, 28, 29, 30 | September | 2020 |
| 1, 2 | October | 2020 |
+--------------------+-----------+------+
如果可能的话,我找不到一种让我的日子变得像这样的方法:
+--------------+-----------+------+
| days | month | year |
+--------------+-----------+------+
| 8, 10-12, 16 | August | 2020 |
| 20, 27-30 | September | 2020 |
| 1-2 | October | 2020 |
+--------------+-----------+------+
如您所见,我需要将连续数字简单地替换为“-”。
这可以在 SQL / MySQL 中实现吗?运行 MySQL 5.5.28。我知道它很旧,但这就是我所拥有的并且无法升级... :(
感谢您的意见! 帕特
【问题讨论】:
-
你能用示例数据创建一个小提琴,以便我们尝试一下吗?
-
不确定我是否理解如何创建一个小提琴游乐场...我无法向外界开放对我的数据库的访问 ;)
-
指定精确 MySQL版本。
-
最简单的方法可能是编写一个函数,获取当前结果字符串并输出最终字符串。 (如果 MySQL 函数能够做到这一点;我不知道。)否则你最终会遇到间隙和孤岛问题,你可以用 MySQL 8 来解决这个问题。
标签: mysql sql datetime window-functions gaps-and-islands