用sql将一列日期数据处理成一行数据,连续日期用-连接,不连续用,连接
时间: 2023-12-16 18:06:32 浏览: 176
假设你的日期数据存储在表 `date_table` 的列 `date_column` 中,以下是将该列数据处理成一行数据的 SQL 语句:
```sql
SELECT GROUP_CONCAT(DATE_FORMAT(date_column, '%Y-%m-%d')
ORDER BY date_column
SEPARATOR IF(DATEDIFF(date_column, @prev_date) = 1, '-', ',')
) AS date_range
FROM date_table
CROSS JOIN (SELECT @prev_date := NULL) AS init
```
这里使用了 GROUP_CONCAT 函数将日期数据连接成一行字符串。GROUP_CONCAT 的第一个参数是要连接的字符串,这里使用 DATE_FORMAT 函数将日期格式化为 'YYYY-MM-DD' 的形式。GROUP_CONCAT 的第二个参数是一个 ORDER BY 子句,用于按照日期升序排列。GROUP_CONCAT 的第三个参数是一个 SEPARATOR 子句,用于指定连接符。如果当前日期与前一个日期相差一天,使用连字符 '-' 连接;否则使用逗号 ',' 连接。最后使用 CROSS JOIN 将一个初始化的变量 @prev_date 加入查询中,用于记录前一个日期的值。
以上 SQL 语句可以得到以下结果:
| date_range |
| ----------------------------- |
| 2022-01-01-2022-01-02,2022-01-05-2022-01-07,2022-01-09 |
阅读全文