【发布时间】:2021-12-17 21:58:18
【问题描述】:
我正在尝试拆分一个字段(在某个分隔符';'处)并将结果插入一个表中。 最多为 5 个由 ';' 分隔的子字符串.最多只有5个水果。 仅给定水果列,如何拆分字符串以获取单独的水果。如果水果少于 5 个,剩余的列将返回 NA。
| fruits | fruit1 | fruit2 | fruit3 | fruit4 | fruit5 |
|---|---|---|---|---|---|
| apple; orange; banana | apple | orange | banana | -null- | -null- |
| apple; orange; pine-apple; dragon-fruit; banana | apple | orange | pine-apple | dragon-fruit | banana |
| pear/grape ; orange; banana; strawberry | pear/grape | orange | banana | strawberry | -null- |
| apple; blueberry; kiwi/lemon | apple | blueberry | kiwi/lemon | -null- | -null- |
我第一次创建了新列并将其全部设置为空。 我试过下面的代码,但它不起作用,如果水果比列少,剩下的列将只取最后一个水果的值而不是 null。
SELECT
fruits,
SUBSTRING_INDEX(fruits, ';', 1) AS 'fruit1',
CASE
WHEN LOCATE(';', fruits, LENGTH(fruit1)+1) = 0 THEN NULL
ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(fruits, ';', 2), ';', -1)
END AS 'fruit2',
CASE
WHEN LOCATE(';', fruits, LENGTH(fruit1)+LENGTH(fruit2)+1) = 0 THEN NULL
WHEN LOCATE(';', fruits, (LOCATE(';', fruits, LENGTH(fruit1)) + 2)) = 0 THEN NULL
ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(fruits, ';', 3), ';', -1)
END AS 'fruit3',
CASE
WHEN LOCATE(';', fruits, LENGTH(fruit1) + LENGTH(fruit2) + LENGTH(fruit3) + 3) = 0 THEN NULL
WHEN LOCATE(';', fruits, (LOCATE(';', fruits, LENGTH(fruit1) + LENGTH(fruit2) + LENGTH(fruit3)+2) + 1)) = 0 THEN NULL
ELSE SUBSTRING_INDEX(SUBSTRING_INDEX(fruits, ';', 4), ';', -1)
END AS 'fruit4'
FROM TABLENAME;
还有更多信息可以拆分字符串吗?
【问题讨论】:
标签: mysql sql string split mysql-workbench