数据库中的分割数字用短划线分隔( - )

时间:2014-08-15 16:40:10

标签: mysql

我正在尝试将超过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或者如果有更快的方法可以做到这一点。

1 个答案:

答案 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)包裹起来。