使用mysql内置的字符串分割函数进行对字段分割
函数名:SUBSTRING_INDEX(str, delim, count)
- str: 要处理的字符串
- delim: 分割符
-
count: 计数 如果为正数,则从左开始数,如果为负数,则从右开始数
str = ‘www.baidu.com’; SELECT substring_index(‘www.baidu.com’,’.’, 1); #www SELECT substring_index(‘www.baidu.com’,’.’, 2); #www.baidu SELECT substring_index(‘www.baidu.com’,’.’, -1); #com SELECT substring_index(‘www.baidu.com’,’.’, -2); #baidu.com SELECT substring_index(substring_index(‘www.baidu.com’,’.’, -2), ‘.’, 1); #baidu
创建数据
CREATE DATABASE `test`;
USE `test`;
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`context` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `test`(`id`,`context`) VALUES (1,'1,2,3,4,5,6,7');
查询示例
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(t.context, ',', b.help_topic_id + 1),
',',
- 1
)
FROM
test t
JOIN mysql.help_topic b
ON b.help_topic_id < (
LENGTH(t.context) - LENGTH(REPLACE(t.context, ',', '')) + 1
) ;
这里使用到mysql的内置表help_topic_id,里面有508条数据(不同版本数据条数有差别),用户需要有对该表查询的权限才行,这样的话只满足分割数量少于508条的字符串,否则应该自定义辅助表,设置更大的一个递增列