Это грязно, но на основании ответа на этот вопрос Как получить последний индекс подстроки в SQLite?
SQLFiddle с живым примером здесь Это может быть не так эффективно, как может быть. Это ужасно. Это точно!
Что касается переменного числа тире, ну, если количество штрихов незначительно, можно сначала выполнить запрос, чтобы заменить все двойные черты '--'
одиночными чертами '-'
. При необходимости выполните это несколько раз, если встречаются более двух тире.
Решение SQLite
CREATE TABLE `parts` (
`partname` TEXT,
`postfix1` TEXT,
`postfix2` TEXT,
`postfix3` TEXT
);
INSERT INTO `parts`
(`partname`)
VALUES
('aaaa-bbbb-ddddd-ccc-ggggggg'),
('aaaa-bbbbb-dddd-cccc-gggggg'),
('aaaa-bbbbbb-ddd-ccccc-ggggg'),
('aaaa-bbbbbbb-dd-cccccc-gggg')
;
UPDATE `parts`
SET `postfix1` = CASE
WHEN instr(`partname`, '-') > 0 THEN
replace(`partname`, rtrim(`partname`, replace(`partname`, '-', '')), '')
ELSE NULL
END;
UPDATE `parts`
SET `postfix3` = CASE
WHEN instr(`partname`, '-') > 0 THEN
replace(`partname`, rtrim(
rtrim( rtrim(`partname`, replace(`partname`, '-', '')), '-'),
replace(`partname`, '-', '')), '')
ELSE NULL
END;
UPDATE `parts`
SET `postfix2` = CASE
WHEN instr(`partname`, '-') > 0 THEN
replace(
replace(`partname`,
'-' || replace(`partname`, rtrim( rtrim( rtrim(`partname`, replace(`partname`, '-', '')), '-'), replace(`partname`, '-', '')), ''),
''),
rtrim(
replace(`partname`,
'-' || replace(`partname`, rtrim( rtrim( rtrim(`partname`, replace(`partname`, '-', '')), '-'), replace(`partname`, '-', '')), ''),
''),
replace(
replace(`partname`,
'-' || replace(`partname`, rtrim( rtrim( rtrim(`partname`, replace(`partname`, '-', '')), '-'), replace(`partname`, '-', '')), ''),
''),
'-', '')
),
'')
ELSE NULL
END;
SELECT * FROM `parts`;
Дает результаты
partname postfix1 postfix2 postfix3
--------------------------------------------------------------------
"aaaa-bbbb-ddddd-ccc-ggggggg" "ggggggg" "ddddd" "ccc-ggggggg"
"aaaa-bbbbb-dddd-cccc-gggggg" "gggggg" "dddd" "cccc-gggggg"
"aaaa-bbbbbb-ddd-ccccc-ggggg" "ggggg" "ddd" "ccccc-ggggg"
"aaaa-bbbbbbb-dd-cccccc-gggg" "gggg" "dd" "cccccc-gggg"