将 MariaDB 列拆分为三个不同的列

Split MariaDB column into three different columns

我有一个 table loginData 作为

col
2020-11-30 03:38:01event_scheduler1
2020-11-30 03:38:01kaarmax1
2020-11-30 03:38:01mk_adp_integration_scheduler7
2020-11-30 03:38:01mk_appointment20
2020-11-30 03:38:01mk_appointment_push2
2020-11-30 03:38:01mk_arkona_integration_scheduler2
2020-11-30 03:38:01mk_batchjobs47
2020-11-30 03:38:01mk_billing10
2020-11-30 03:38:01mk_calender_bot9
2020-11-30 03:40:01mk_dms_adp_integration3
2020-11-30 03:42:01mk_dms_adp_integration3

我想将数据分成 3 个不同的列

time_stamp login number_of_login
2020-11-30 03:42:01 mk_dms_adp_integration 3

最后一个整数可以超过一位数,我的问题与其他问题不同,因为它没有分隔符

谢谢

这不是一个特别困难的问题,只要文本的前 19 位始终是完整的日期时间戳:

SELECT CAST(SUBSTRING(tmp.`col`, 1, 19) AS DATETIME) as `dts`, SUBSTRING(tmp.`col`, 20) as `login`, COUNT(SUBSTRING(tmp.`col`, 1, 19)) as `number_of_login`
  FROM (SELECT '2020-11-30 03:38:01event_scheduler1' as col UNION ALL 
        SELECT '2020-11-30 03:38:01kaarmax1' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_adp_integration_scheduler7' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_appointment20' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_appointment20' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_appointment20' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_appointment20' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_arkona_integration_scheduler2' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_billing10' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_billing10' as col UNION ALL 
        SELECT '2020-11-30 03:38:01mk_calender_bot9' as col UNION ALL 
        SELECT '2020-11-30 03:40:01mk_dms_adp_integration3' as col UNION ALL 
        SELECT '2020-11-30 03:40:01mk_dms_adp_integration3' as col) tmp 
 GROUP BY `dts`, `login`;

我已经修改了您的一些示例数据以在 number_of_login 列中显示不同的值。

第一步 ALTER TABLE tmp.data ADD COLUMN time_stamp TIMESTAMP NULL after col, ADD COLUMN logins VARCHAR(500) NULL after time_stamp, ADD COLUMN no_of_logins INT NULL after logins;

第 2 步

update tmp.data set time_stamp = left(tmp.data.col, 19), logins = REGEXP_REPLACE(tmp.data,'[0-9]|-|:',''), no_of_logins = REGEXP_REPLACE(substring(tmp.data.col,20),'[a-z]|_','')

可能不是很有效,但这是我使用的。