猛乐网分享游戏网名,名字,昵称,电脑技能,趣味生活!

MySQL技巧:将数据库表单行记录中一个字段拆分为多个记录

发布时间:03-30 | 来源:梦6网 | 阅读:684次

将数据库表单行记录中一个字段拆分为多个记录需要用到三个函数: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

您可能也感兴趣:

  • Windows报告你的设备硬件已更改,错误代码:0xC004F211 错误代码 0xC004F211 通常表示 Windows 系统在激活时检测到设备硬件发生了重大更改,导致系统无法找到匹配的许可证
    2514阅读 Windows,设备硬件,错误代码,0xC004F211,Windows激活,许可证
  • 使用谷歌浏览器(chrome)截图方法汇总 按以下步骤操作谷哥浏览器截图:用谷歌浏览器打开要截图的网页,在键盘上按下F12键,进入开发者工具模式;
    25630阅读 谷歌,谷歌浏览器,谷歌浏览器截图,浏览器截图,截图
  • MySQL数据库模糊查询方法大全(包括正则、通配符、内置函数等) MySQL常用到的模糊查询方法,通过通配符%来进行匹配,其实只是冰山一角,在MySQL中,支持模糊匹配的方法有很多,且各有各的优点。带大家一起掀起MySQL的小裙子,看一看模糊查询下面还藏着多少鲜为人知的好东西。
    60099阅读 MySQL,数据库,模糊查询,正则表达式,通配符,内置函数

热门排行名字

热门推荐名字

好听的游戏网名 男生游戏网名 女生游戏网名 情侣游戏网名 战队公会名字 游戏英文网名 个性游戏网名 QQ微信名字 游戏网名大全 游戏宠物网名 知名商城 潮流商品 折扣特卖 品质好物 优选商城 进口商城

Copyright ©2008-   www.meng6.com 版权所有   猛乐网(www.meng6.com)   

京ICP备14024686号-3