聆听风声 点点滴滴都很珍贵!

mysql分割字符串

2018-12-07

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


Similar Posts

Comments