MYSQL - 将冒号分隔的列值拆分为新列

标签 mysql sql

我有一张这样的 table ,

CREATE TABLE IF NOT EXISTS `cms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cms` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


INSERT INTO `cms` (`id`, `cms`) VALUES
(1, 'cms:/o:freebsd:freebsd:2.1.7'),
(2, 'cms:/o:netbsd:netbsd:1.0');

enter image description here

我需要将 cms 列值拆分为四个附加列,因此必须用冒号分隔。

我需要输出这样的内容

enter image description here

需要查询此内容

最佳答案

试试这个。它有点脏,但它有效:

select source.*
, left(cms, FirstColon - 1) as CMS2
, mid(cms, FirstColon + 1, SecondColon - FirstColon -1) as Extension 
, mid(cms, SecondColon + 1, ThirdColon - SecondColon -1) as Product
, mid(cms, ThirdColon + 1, FourthColon - ThirdColon -1) as version
from (
    select a.*
    , locate(':', cms) 'FirstColon'
    , locate(':', cms, locate(':', cms) + 1) 'SecondColon'
    , locate(':', cms, locate(':', cms, locate(':', cms) + 1) + 1) 'ThirdColon'
    , locate(':', cms, locate(':', cms, locate(':', cms, locate(':', cms) + 1) + 1) + 1) 'FourthColon'
    from cms a
) source
;

但是如果您安装了 Microsoft Excel,则可以尝试 Excel Text To Column工具。只需将原始数据导出为 Microsoft Excel 格式,然后使用该工具即可。

关于MYSQL - 将冒号分隔的列值拆分为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40354897/

相关文章:

MySQL根据列的最高值返回不同的行

mysql - 从多个表中删除行

php - 为什么Mysqli准备好的语句不转义通配符(%和_)和反斜杠(\)?

php - 查询表单转SQL错误

sql - 排除另一个表中存在日期的行

SQL查询显示其列不以给定字符串开头的所有行

sql - SQL Server 中两个单独表中的两列之间的差异

MySQL 处理超过 24 小时的日期格式

php - Slim-3.x 中缺少 Slim.php

sql - 删除行以及引用行 ID 的行