我正在尝试将超过4百万行的列拆分为4个新列。问题是我不知道在哪里查看或者我应该在Google搜索哪个词。 (是的,我已经在谷歌和Stack上搜索了类似的问题,但只在堆栈上找到一个可能是一个很好的修复,但不确定它是否会有所帮助,添加链接进一步到相关问题。)
这是我的数据库。
ID Security
1 1-5-4-6
2 2-4-06-5
3 1-4-1-2
4 1-4-1-3
5 1-45-5-32
我想要做的是以下内容,“安全”列需要拆分为4个单独的列(组,lvl,密钥,代码)
ID group lvl key code
1 1 5 4 6
2 2 4 6 5
3 1 4 1 2
4 1 4 1 3
5 1 45 5 32
我遇到的问题是找到一个合适的解决方案来拆分这些数字,一个问题是当前的安全列每个最多可以有3个字符 - 分离。
我的行可以是01-45-822-01,也可以是1-2-3-4。
我在stackoverflow上找到的一个问题 MySQL : how to split text and number with "-"
它似乎确实指向了正确的方向,但仍然不确定这是否适合这么大的数据集。索引超过5.9gb或者如果有更快的方法可以做到这一点。
答案 0 :(得分:3)
您可以使用SUBSTRING_INDEX
在一个查询中执行此操作:
UPDATE `table`
SET
`group` = SUBSTRING_INDEX(`Security`, '-', 1),
`lvl` = SUBSTRING_INDEX(SUBSTRING_INDEX(`Security`, '-', 2), '-', -1),
`key` = SUBSTRING_INDEX(SUBSTRING_INDEX(`Security`, '-', 3), '-', -1),
`code` = SUBSTRING_INDEX(`Security`, '-', -1);
如果您不再将数字存储为文本,那么您可能希望将CAST(expr AS UNSIGNED)
包裹起来。