Bootstrap

SQL快速拆分字符串

原创 victory54610 Python SQL审天下 2024-01-28 06:33 发表于山西

我们都知道,使用group_concat可以快速合并字符串,那么如果要拆分字符串呢,怎么办?这里所说的拆分字符串是指拆分成不同的行。

我们以一个实例来说明,比如说我们要把下图左边的样式拆分成右边的样式,用SQL怎么写呢?

图片

在正式写SQL脚本之前,我们要搞清楚三个函数的基本用法:

(1)SUBSTR函数,用于从字符串中提取子串。

语法:SUBSTR(str, start, length)

str 是要提取子串的原始字符串。

start 是起始位置,表示从原始字符串的第几个字符开始提取。注意,MySQL 中的字符串索引是从 1 开始的。

length 是可选的参数,表示要提取的子串的长度。如果省略 length,则 SUBSTR() 将返回从 start 位置到原始字符串末尾的所有字符。

(2)INSTR函数,查找一个子字符串在另一个字符串中的位置

语法:INSTR(str, substr)

str 是要搜索的字符串。

substr 是要在 str 中查找的子字符串。

INSTR() 函数返回 substr 在str 中的第一个匹配位置。如果 substr 不在 str 中,则返回 0。

(3)CONCAT函数,连接两个或多个字符串

语法:CONCAT(str1, str2, ...)

str1, str2, ... 是要连接的字符串参数。

原始数据:

图片

结果数据:

图片

完整代码:

WITH RECURSIVE c(id,province,city,str) as (   SELECT      id,      province,      substr( city, 1, instr( city, '、' ) - 1 ),      substr( concat(city,'、'), instr( city, '、' ) + 1 )   FROM      cities c -- 初始化操作    UNION ALL   SELECT        id,      province,      substr( str, 1, instr( str, '、' ) - 1 ),      substr( str, instr( str, '、' ) + 1 ) -- 递归   FROM c    WHERE instr(str,'、') > 0 -- 循环的终止条件)SELECT id,province,city FROM c ORDER BY id;

今天的分享就到这儿啦,非常感谢您对“Python SQL审天下”公众号的关注和点赞。如果您觉得我的公众号能给您带来一丝丝的收获,请多多转发给您的朋友圈,让更多的人看到并了解。也许您不经意间的点赞和转发,会给他人带来独特的体验和感受。

;