2016-11-01 3 views
0

У меня есть таблица, как это,MYSQL - Сплит двоеточия значений столбцов в новые столбцы

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

необходимости запроса для этого

+1

MySQL - не лучший инструмент для этого. –

+0

то каким инструментом или скриптом я должен пойти для –

+1

У вас есть доступ к Java? Очень просто взорвать строку с помощью Java. После этого доведите данные до MySQL. Кстати, вы абсолютно правы, нормализуя свои данные таблицы, но MySQL не так хорош в взрывающихся строках. –

ответ

1

Попробуйте это. Это немного грязный, но это работает:

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 и используйте этот инструмент.

+0

спасибо, это спасло мой день –

Смежные вопросы