将数据库表单行记录中一个字段拆分为多个记录需要用到三个函数:SUBSTRING_INDEX函数、CONCAT函数和INSTR函数,还需要用CASE WHEN搜索条件;
下面分别介绍这三个函数据的作用:
一、SUBSTRING_INDEX函数介绍
在MySQL中,SUBSTRING_INDEX() 函数用于返回子字符串,该子字符串是从字符串中提取的,最多出现在指定的分隔符之前的次数。
SUBSTRING_INDEX(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N)
N从1开始计数,如果N为正,则返回最终定界符左侧的所有内容(从左侧开始计数)。如果N为负,则返回最终定界符右边的所有内容(从右边开始计数);
如:str_url=https:/url/www.meng6.com;
select meng6_id,SUBSTRING_INDEX(str_url,'/',N) as meng6_name from meng6_submit
如果 N=1 则取https:
N=2,http:/url
N=-1,www.meng6.com
N=-2,url/www.meng6.com
select SUBSTRING_INDEX('1,2,3,4,5,6,7,8,9',',',1) as meng6_num
如果数量设置为1,则返回第一个数字1,
如果数量设置为-1,则返回最后一个数字9,
如果你想在使用 SUBSTRING_INDEX() 后把分隔符再加回来,你可以通过CONCAT函数来实现。
二、CONCAT函数介绍
如果你只是想要在结果字符串的末尾加上分隔符,可以直接使用 CONCAT() 函数。例如,如果你想要在结果字符串后加上一个逗号:
SELECT CONCAT(SUBSTRING_INDEX(your_column, ',', 1), ',') AS modified_string FROM your_table;
三、INSTR()是MySQL自带的字符串函数之一,它用于查找一个字符串中子字符串第一次出现的位置。
1、INSTR()函数的语法
INSTR(str,substr)
其中,str是要搜索的主字符串,substr是要查找的子字符串;
INSTR()函数返回要查找的子字符串在主字符串中第一次出现的位置。如果主字符串中没有子字符串,该函数返回0;
2、INSTR()函数的示例
示例1:
SELECT INSTR('hello world','world');
输出结果:7
说明:在主字符串'hello world'中,子字符串'world'第一次出现的位置是7。
四、Case when 的用法: 一旦满足了某一个WHEN, 则这一条数据就会退出CASE WHEN , 而不再考虑 其他CASE;
Case具有两种格式。简单Case函数和Case搜索函数。
简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
这种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
比如:下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
五、例句:将一个地址字段里的省份/市/区/县拆分出来的SQL语句如下:
SELECT dizhi,CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(dizhi,'市', 1),'省', -1),'市') AS shi, CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(dizhi,'区', 1),'县', 1),'市', 2),'市', -1),CASE
WHEN(INSTR(dizhi, '县') > 0) THEN '县'
WHEN(INSTR(dizhi, '区') > 0) and (INSTR(dizhi, '区') < 8) THEN '区'
WHEN(INSTR(dizhi, '市') > 0) THEN '市'
END) AS qu
FROM meng6 WHERE dizhi IS NOT NULL
Copyright ©2008- www.meng6.com 版权所有 猛乐网(www.meng6.com)