我的数据库中有“ Actor ”字段,它是一个由 1 个或多个文本项组成的逗号分隔列表。但不固定..它可以是从 1 到 10 的任意数量的项目。
我在 MYSQL 中使用以下代码将单个字段分解为单独的列
SELECT
substring_index ( substring_index ( `actors`,',',1 ), ',', -1) AS `Name of Actor 1`,
substring_index ( substring_index ( `actors`,',',2 ), ',', -1) AS `Name of Actor 2`,
.... all the way down to ...
substring_index ( substring_index ( `actors`,',',10 ), ',', -1) AS `Name of Actor 10`
除了一件事之外,这非常有效......当列表用完时,最后一项会一遍又一遍地重复
在 3 个 Actor 的列表中,我需要 Actor 4 - 10 的名称为 NULL,实际发生的情况是 Actor 4-10 填充了 Actor 3(最后一项)
如何扩展(如果可能)SQL 语句以停止返回已使用的最后一项。
最佳答案
尝试计算字符串中逗号的数量,如果有足够的逗号,则有用于执行子字符串的条目。如果有 1 个逗号(即,如果有超过 0 个逗号),则至少有两个条目。不要向 CASE 提供 ELSE,因此如果没有足够的条目,输出将为 null:
CASE WHEN LENGTH(`actors`) - LENGTH(REPLACE(`actors`, ',', '')) > 0 THEN
substring_index ( substring_index ( `actors`,',',2 ), ',', -1) END AS `Name of Actor 2`,
CASE WHEN LENGTH(`actors`) - LENGTH(REPLACE(`actors`, ',', '')) > 1 THEN
substring_index ( substring_index ( `actors`,',',3 ), ',', -1) END AS `Name of Actor 3`,
等等
关于MySQL 多次停止返回子字符串中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518582/