MySQL 多次停止返回子字符串中的最后一项

标签 mysql sql substring

我的数据库中有“ 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/

相关文章:

mysql - 仅当另一行中存在值时才选择一行

Python 2.7 MySQLdb将从数据库读取的最后一行保存到文本文件中

c# - 使用 C# 向 Paradox 表插入查询的问题

sql - 如何匹配以 DB2 上的文本结尾的文本?

string - 查找给定字符串的显性循环子串

ruby - 正则表达式在哪个位置失败?

MySQL更新命令

android - 如何更新设备上已存在的 SQLite 表?

sql - 检查日期是否是圣诞节或元旦的函数

c++ - 如何从Qt中的字符串中获取特定字段的值