【3】获取字符串长度:LENGTH( str )
参数名 解释
str 需要计算长度的字符串
(1)获取 ‘7654,7698,7782,7788’ 字符串的长度
LENGTH('7654,7698,7782,7788')
实现的SQL解析
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
mysql.help_topic
WHERE
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
此处利用 mysql 库的 help_topic 表的 help_topic_id 来作为变量,因为 help_topic_id 是自增的,当然也可以用其他表的自增字段辅助。
help_topic 表:
实现步骤:
Step1:首先获取最后需被拆分成多少个字符串,利用 help_topic_id 来模拟遍历 第n个字符串。
涉及的代码片段:
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
Step2:根据“,”逗号来拆分字符串,此处利用 SUBSTRING_INDEX(str, delim, count) 函数,最后把结果赋值给 num 字段。
涉及的代码片段:
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
这里使用到mysql的内置表help_topic_id,里面有508条数据(不同版本数据条数有差别),用户需要有对该表查询的权限才行,这样的话只满足分割数量少于508条的字符串,否则应该自定义辅助表,设置更大的一个递增列
https://www.cnblogs.com/gered/p/10797012.html【0】需求数据库中 num字段值为:7654,7698,7782,7788实现的效果:需要将一行数据变成多行7654769877827788实现方式: sELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num FROM mysql.h..
一、函数
功能:对
字符串进行分隔数组,取指定顺序位置的子
字符串,支持左右双向获取,支持默认值返回,附有测试用例
二、函数格式:fn_get_
split_val(in_str varchar,in_delimiter varchar,in_order int,in_default varchar)
三、测试用例
工作中碰到需求简化后是这样的:
两个表设计的不太合理,学生表student、老师表teacher、学生表有个字段是teachers,保存的是所有老师的id,用逗号隔开,想要查询某学生的老师?
student表
id name teachers
1 张三 1,2
2 李四 2,3
teacher表
id name
1 李老师
2 张老师
3 ...
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
mysql.help_topic
下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),”) end insert @t
DROP TABLE IF EXISTS `test`;
CREATE TABLE IF NOT EXISTS `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL,
`num` int(8),
PRIMARY KEY (`id`)
INSERT INTO `test`(`name`, `num`) VALUES ('a1,b258,c', 11);
INSERT INTO
MySQL提供了很多函数来拆分字符串,常见的有SUBSTRING、LEFT、RIGHT、REPLACE等函数。这些函数可以将字符串按照指定的规则进行拆分,拆分出多个列。
最常用的拆分字符串函数是SUBSTRING_INDEX函数,该函数可以通过指定分隔符和分隔符出现的次数,将一个字符串拆分成多个部分。例如,我们有一个字符串“abc,d,efg,hijk”,我们想要将它拆分成四个部分,可以使用SUBSTRING_INDEX函数,如下所示:
SELECT SUBSTRING_INDEX('abc,d,efg,hijk', ',', 1) AS col1,
SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 2), ',', -1) AS col2,
SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 3), ',', -1) AS col3,
SUBSTRING_INDEX('abc,d,efg,hijk', ',', -1) AS col4;
这样我们就可以把字符串“abc,d,efg,hijk”拆分成四个部分。其中,SUBSTRING_INDEX('abc,d,efg,hijk', ',', 1)返回的是“abc”,即从开头到第一个逗号之间的部分;SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 2), ',', -1)返回的是“d”,即从第一个逗号到第二个逗号之间的部分;SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 3), ',', -1)返回的是“efg”,即从第二个逗号到第三个逗号之间的部分;SUBSTRING_INDEX('abc,d,efg,hijk', ',', -1)返回的是“hijk”,即从最后一个逗号到结尾之间的部分。
当然,如果我们的字符串中有更多的部分需要拆分,则需要对以上语句进行相应的修改。总之,使用MySQL提供的字符串函数,我们可以轻松地拆分出多个列,方便地进行数据处理。