将 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]|_','')
可能不是很有效,但这是我使用的。
我有一个 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]|_','')
可能不是很有效,但这是我使用的。