首页 » 网站建设 » php字符串逗号分隔技巧_MySQL大年夜神教你若何拆分逗号分隔的字符串

php字符串逗号分隔技巧_MySQL大年夜神教你若何拆分逗号分隔的字符串

访客 2024-11-03 0

扫一扫用手机浏览

文章目录 [+]

在MySQL 5.7中拆分字符串,你可以利用一系列的字符串函数组合来实现。
下面是一个示例,展示了如何在没有递归CTEs的情形下拆分逗号分隔的字符串:

假设你有一个表table1,个中有一个字段col1包含逗号分隔的字符串,你想要将这个字段拆分成多行。

php字符串逗号分隔技巧_MySQL大年夜神教你若何拆分逗号分隔的字符串

SELECT

php字符串逗号分隔技巧_MySQL大年夜神教你若何拆分逗号分隔的字符串
(图片来自网络侵删)

SUBSTRING_INDEX(SUBSTRING_INDEX(t.col1, ',', numbers.n), ',', -1) AS value

FROM

(SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers

INNER JOIN table1 t ON CHAR_LENGTH(t.col1)

-CHAR_LENGTH(REPLACE(t.col1, ',', '')) >= numbers.n-1

WHERE

n <= 1 + (CHAR_LENGTH(t.col1) - CHAR_LENGTH(REPLACE(t.col1, ',', '')))

ORDER BY

t.col1,

n;

在这个查询中,我们创建了一个数字表numbers,它包含了一系列的数字,这些数字代表了可能的最大逗号数量。
然后,我们利用INNER JOIN将这个数字表与table1连接起来,基于col1字段中逗号的数量。

SUBSTRING_INDEX函数用于获取逗号分隔的字符串中的特定部分。
外部的SUBSTRING_INDEX用来获取第n个逗号之前的所有内容,而内部的SUBSTRING_INDEX用来从该子字符串中获取末了一个逗号之后的内容,即第n个值。

WHERE子句用于过滤那些由于逗号数量不敷而产生的空字符串。
ORDER BY子句用于确保结果的顺序是精确的。

请把稳,这种方法依赖于你提前知道或者能够估计col1字段中可能涌现的最大逗号数量。
你须要根据这个数量来扩展numbers表。
上面的示例中,我们假设了最大逗号数量为3,因此只包含了到4的数字(由于n是从1开始的)。

如果你不愿定最大逗号数量,你可能须要在运用程序层面进行拆分,或者利用动态SQL来构建这个查询。
但是,请把稳,动态SQL在MySQL中常日是通过存储过程来实现的,而在MySQL 5.7中,你不能直接在存储过程外部利用动态SQL。
因此,对付繁芜的拆分需求,常日建议在运用程序中进行处理。

相关文章