app_recurrenceexception列已删除约会日期.

我就是这样实现的

SELECT
    app_recurrenceexception,
    (SELECT GROUP_CONCAT(LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(app_recurrenceexception, ',', numbers.n), ',', -1), 8) SEPARATOR ',')
    FROM
    (
        SELECT 1 + a.N + b.N * 10 + c.N * 100 AS n
        FROM
        (SELECT 0 AS N 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) AS a
        CROSS JOIN
        (SELECT 0 AS N 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) AS b
        CROSS JOIN
        (SELECT 0 AS N 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) AS c
    ) AS numbers
    WHERE
        numbers.n <= 1 + (LENGTH(app_recurrenceexception) - LENGTH(REPLACE(app_recurrenceexception, ',', '')))
    ) AS modified_date
FROM
    `bm_appointment`
WHERE
    app_eventid = 15;

但我想要简单的输出方式

Select (20240402T073000Z,20240405T073000Z,20240408T073000Z,20240411T073000Z)从bm_appointment

如何拆分MSQL查询中每个逗号分隔值的前8个单词.如何从上面的字符串中提取日期.

的工作计划是 20240402,20240405,20240408,20240411......

推荐答案

There many questions and answer about how split comma separated values in MySql (STRING_SPLIT).
See example with recursion.

测试数据

create table bm_appointment(app_eventid int,app_recurrenceexception varchar(1000));
insert  into bm_appointment values
  (15,'20240402T073000Z,20240405T073000Z,20240408T073000Z,20240411T073000Z')
;

查询

with recursive r as(
  select 1 n,app_eventid
    ,case when instr(app_recurrenceexception,',')>0 then
         left(app_recurrenceexception,instr(app_recurrenceexception,',')-1)
     else app_recurrenceexception
     end modified_date
    ,case when instr(app_recurrenceexception,',')>0 then
         mid(app_recurrenceexception,instr(app_recurrenceexception,',')+1)
     else ''
     end rest
  from bm_appointment
  union all
  select n+1 n,app_eventid
    ,case when instr(rest,',')>0 then
         left(rest,instr(rest,',')-1)
     else rest
     end modified_date
    ,case when instr(rest,',')>0 then
         mid(rest,instr(rest,',')+1)
     else ''
     end rest
  from r
  where length(rest)>0
)
-- select app_eventid,n,modified_date 
-- from r;
select app_eventid
  ,group_concat(left(modified_date,8) order by modified_date separator ',') dates 
from r
group by app_eventid;

输出

app_eventid n modified_date
15 1 20240402T073000Z
15 2 20240405T073000Z
15 3 20240408T073000Z
15 4 20240411T073000Z

分组后(级联)

app_eventid dates
15 20240401,20240402,20240405,20240408

Mysql相关问答推荐

配置MySQL服务器以管理数千个表

在联合查询中使用GROUP BY和ORDER BY

根据现有行 Select 月份日期

mysql 代码给我的外键格式不正确

根据时间戳分组删除

MySQL 关于 JSON 数组和子查询的问题

如何使用等于、喜欢和不等于在 json 字段上编写查询?

任何值的 SQL WHERE 子句?

需要按总金额检索前 3 个供应商,每个类别 - 子类别

MySQL 使用了错误的索引

总行大小不超过 65535,但我得到行大小太大.所用表类型的最大行大小,不包括 BLOB,是 65535错误

SUBSTRING_INDEX 获取第 n 个值

DECIMAL(m, n) 在 64 位系统中如何表示?

MySQLi count(*) 总是返回 1

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

MySQL - 如何 Select 值在数组中的行?

如何在 MySQL 的日期时间字段中存储 NULL 值?

将sql查询的结果写入mysql中的文件

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

MySQLgo 除非数字字符进行比较