mysql分割字符串

  • A+
所属分类:数据管理

使用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条的字符串,否则应该自定义辅助表,设置更大的一个递增列

  • 公众号
  • 扫一扫
  • weinxin
  • 打赏
  • 扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: