Mysql 截取字符串

前言

今天在问答频道看到一个问题:MySQL如何将一个字段的值(这个值含有分号)以分号切割然后插入另一张表的两个不同字段?比如A表中有个字段的值是bbbb;cccc,现在想以;分号切割,然后将切割得到的值分别插入B表的两个字段。
(⊙o⊙)…这不应该是用那个分割字符串的XX分割一下就可以么。。好吧,我也忘了函数名,让我来试下解决帮助一下这个稚嫩的同学吧!

正文

打开我的navicat神器,输入select substr , 出现了这么几个函数,如下图,那么它们具体都是什么作用呢?
![image.png](https://img-blog.csdnimg.cn/img_convert/8952a5800db0cda6a4fded9f553067e1.png#align=left&display=inline&height=215&margin=[object Object]&name=image.png&originHeight=215&originWidth=461&size=15382&status=done&style=none&width=461)

substr 与 substring

注意哈,在mysql中,substr和substring的作用都是一样的

第一个参数,要截取的字符串。
第二个参数,标识在字符串中开始截取的位置,负数的话为从末尾开始数,开始位置为0或者超过字符长度的话,返回空字符串。(对于mysql来说,字符串中第一个字符的位置被认为是 1)
第三个参数,标识截取长度,如果截取长度为负数的话,返回空字符串。

-- 结果为 123456
select SUBSTR('123456', 1);
select SUBSTR('123456' FROM 1);
-- 结果为 12
select SUBSTR('123456', 1, 2);
select SUBSTR('123456' FROM 1 FOR 2);

-- 结果为 123456
select SUBSTRING('123456', 1);
select SUBSTRING('123456' FROM 1);
-- 结果为 12
select SUBSTRING('123456', 1, 2);
select SUBSTRING('123456' FROM 1 FOR 2);

-- 结果为 空字符串
select SUBSTRING('123456', -10);
select SUBSTRING('123456', 0);
select SUBSTRING('123456', 1, -2);

substring_index

第一个参数,要截取的字符串。
第二个参数,标识在字符串中要截取的分隔符。
第三个参数,标识截取位置。如果 为正,则返回最后定界符左侧的所有内容(从左侧开始计数)。如果为负,则返回最后定界符右边的所有内容(从右边开始计数)。 搜索时,执行区分大小写的匹配 。

-- 结果为 1
select SUBSTRING_INDEX('1;2;3;4', ';', 1);
-- 结果为 1;2
select SUBSTRING_INDEX('1;2;3;4', ';', 2);
-- 结果为 4
select SUBSTRING_INDEX('1;2;3;4', ';', -1);

很明显,这个substring_index可以帮助开始提到的那个同学的问题,分别取截取的第一位和最后一位插表即可。
如下示例:

INSERT into t2(r2, r3)
SELECT r1, SUBSTRING_INDEX(r1, ';', 1), SUBSTRING_INDEX(r1, ';', -1)
from t1

附录

mysql8.0官方文档地址:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值