龙空技术网

MySQL大神教你如何拆分逗号分隔的字符串

奋斗中的独城人 21

前言:

此刻小伙伴们对“sql去掉字段中的逗号”大约比较看重,大家都需要剖析一些“sql去掉字段中的逗号”的相关资讯。那么小编在网上搜集了一些关于“sql去掉字段中的逗号””的相关文章,希望咱们能喜欢,兄弟们一起来了解一下吧!

来个MySQL大神写一段拆分字符串的语句

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

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

SELECT

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。因此,对于复杂的拆分需求,通常建议在应用程序中进行处理。

标签: #sql去掉字段中的逗号 #mysql逗号分隔拆分 #字符串中的逗号