问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 中用正则表达式如何取一个字符串中指定的字段,

发布网友 发布时间:2022-04-23 18:56

我来回答

6个回答

懂视网 时间:2022-04-30 09:23

mysql处理字符串的两个绝招:substring_index,concat

  最近老是碰到要处理数据库中字符串的处理,发现用来用去也就是这两个函数:

  1、substring_index(str,delim,count)

        str:要处理的字符串

        delim:分隔符

        count:计数

  例子:str=

  substring_index(str,‘.‘,1)

  结果是:www

  substring_index(str,‘.‘,2)

  结果是:www.google

  也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

  相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:

  substring_index(str,‘.‘,-2)

  结果为:google.com

  有人会为,如果我呀中间的的google怎么办?

  很简单的,两个方向:

  1、从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:

  substring_index(substring_index(str,‘.‘,-2),‘.’,1);

  2、你懂得!

  2,concat是连接几个字符串,可以多个哦。

  concat(‘wo‘,‘lin‘,‘xue‘,‘bin‘)

  结果就是wolinxuebin。

mysql处理字符串的两个绝招:substring_index,concat

标签:

热心网友 时间:2022-04-30 06:31

substring_index(input,split,index):input为要截取的字符,split为分隔符,Index为要截取第index个分隔符左(index为正)或右(index为负)的字符串。

举例:

'Provider="RiskManagement" finalScore="65" RGID="100397278"'     //获取finalScore的值

1、获取finalScore右边的字符

select substring_index('Provider="RiskManagement" finalScore="65" RGID="100397278"','finalScore="',-1);

2、再获取" RGID="左边的字符

select substring_index(substring_index('Provider="RiskManagement" finalScore="65" RGID="100397278"','finalScore="',-1),'" RGID="',1);

扩展资料

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。

1、字符串截取:left(str, length)

mysql> select left('sqlstudy.com', 3); 

| left('sqlstudy.com', 3) | 

| sql | 

2、字符串截取:right(str, length)

mysql> select right('sqlstudy.com', 3); 

| right('sqlstudy.com', 3) | 

| com | 

热心网友 时间:2022-04-30 07:49

  代码如下:
  CREATE PROCEDURE sp_str
  (
  IN p_str VARCHAR(50), /*原始字符串*/
  IN p_begin_str VARCHAR(50), /*要匹配的起始字符串*/
  IN p_end_str VARCHAR(50)) /*要匹配的结束字符串*/
  OUT p_result VARCHAR(50)) /*返回结果*/
  NOT DETERMINISTIC
  SQL SECURITY DEFINER
  COMMENT ''
  BEGIN
  DECLARE m_len INT DEFAULT 0;
  DECLARE m_index INT DEFAULT 0;
  /*计算第一个匹配字符串的索引位置*/
  select locate(p_begin_str,p_str)+char_length(p_begin_str) into m_index;
  /*计算第一个匹配字符串的长度*/
  select locate(p_end_str,p_str,m_index) into m_len;
  select SUBSTRING(p_str,m_index,m_len-m_index) INTO p_result ;
  END;

  执行:
  CALL sp_str('[]abcd[12345]aa[]ss','abcd[',']',@result);
  返回值 @result 为12345
  call sp_str('[]abcd[sdww]aa[]ss','abcd[',']',@result);
  返回值 @result 为sdww
  如果不用存储过程,可以直接写sql语句实现:

  代码如下:
  select SUBSTRING(
  ']abcd[12345]111[]',
  locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['),
  locate(']',']abcd[12345]111[]',CHAR_LENGTH('abcd['))-
  (select locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['))
  )

  返回值为 12345
  关于mysql的函数介绍:
  CHAR_LENGTH(str)
  返回字符串str的长度。
  LOCATE(substr,str)
  POSITION(substr IN str)
  返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
  mysql> select LOCATE('bar', 'foobarbar');
  -> 4
  mysql> select LOCATE('xbar', 'foobar');
  -> 0
  该函数是多字节可靠的。 LOCATE(substr,str,pos)
  返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
  mysql> select LOCATE('bar', 'foobarbar',5);
  -> 7
  这函数是多字节可靠的。
  SUBSTRING(str,pos,len)
  SUBSTRING(str FROM pos FOR len)
  MID(str,pos,len)
  从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
  mysql> select SUBSTRING('Quadratically',5,6);
  -> 'ratica'
  该函数是多字节可靠的。
  SUBSTRING(str,pos)

热心网友 时间:2022-04-30 09:24

MySQL 一直以来都支持正则匹配,不过对于正则替换则一直到MySQL 8.0 才支持。对于这类场景,以前要么在MySQL端处理,要么把数据拿出来在应用端处理。

比如我想把表y1的列str1的出现第3个action的子 串替换成dble,怎么实现?


1. 自己写SQL层的存储函数。代码如下写死了3个,没有优化,仅仅作为演示,MySQL 里非常不建议写这样的函数。

热心网友 时间:2022-04-30 11:15

set @str := '{"brightness_current":0,"profile_currunt":1}';
set @find_str := '"brightness_current":';
select @find_str, value from (select @start_pos := locate(@find_str, @str), @end_pos := @start_pos + length(@find_str), @tail_pos := if(locate(",", @str, @end_pos) = 0, locate("}", @str, @end_pos), locate(",", @str, @end_pos)), substring(@str, @end_pos, @tail_pos - @end_pos) as value) as t;
输出:
+-----------------------+-------+
| @find_str | value |
+-----------------------+-------+
| "brightness_current": | 0 |
+-----------------------+-------+
1 row in set (0.01 sec)

set @str := '{"brightness_current":0,"profile_currunt":1}';
set @find_str := '"profile_currunt":';
select @find_str, value from (select @start_pos := locate(@find_str, @str), @end_pos := @start_pos + length(@find_str), @tail_pos := if(locate(",", @str, @end_pos) = 0, locate("}", @str, @end_pos), locate(",", @str, @end_pos)), substring(@str, @end_pos, @tail_pos - @end_pos) as value) as t;
输出:
+--------------------+-------+
| @find_str | value |
+--------------------+-------+
| "profile_currunt": | 1 |
+--------------------+-------+
1 row in set (0.01 sec)

热心网友 时间:2022-04-30 13:23

确定是在mysql环境及SQL下用正则解析吗?你贴的这是标准的JSON字符流啊、在应用层解析会更好啊。否则你干脆substr还直接些。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
读狼牙山五壮士有感400字结尾怎么写??? ...三国演义》的读后感,语句通顺即可,字数在400到550之间,急... 国际占星研究院成立背景 占星师的华人著名占星师 鲁道夫主要著作 红利指什么意思 玩三张牌开始输了400多!后来又向他们借了1000多,结果都输了,问下借的... 杀手锏12星座女该怎样攻下海王 墙壁开关断火线还是零线 2004年12月26日5时26分图中甲地发生6.3级地震,造成严重人员伤亡。甲地... mysql截取删除字符串 mysql 字符串类型问题 mysql怎么查询某个字段里的字符串? mysql 字符串处理 Mysql数据库中海量字符串中如何快速查找那些具有公共的子串字符串... mysql字符串类型包括 梦见家里房子再建一个大门 梦见自已家大门换成了鬼门? 梦见家里的大门换了新的 怎样去除虾仁里的黑线 重庆如何更快速找到需要小额贷款的人! 重庆三快小额贷款骗了个人信息没事吧!已经三个月了,我怕拿我的个人信息去贷款? 重庆市分众小额贷款有限公司怎么样? 生活妙招:怎样轻松去除虾背上的黑线 环球怎么样 靠不靠谱。有用吗?能具体说说吗 重庆隆携小额贷款怎么样? 环球可以借款吗 环球怎么样,真可以贷款吗 来看看 哪些是坑人的重庆小额贷款公司 重庆小额贷款这个公司是不是真的? mysql字符串截取 MySql截取字符串 mysql的查询中怎么截取字符串? MySQL中的字符串比较 mysql 截取字符串 MySql中截取字符串中的某几个字符 mysql 字符串如何计算 美团包吃住吗? 美团送外卖怎么样 好不好啊 一个月能赚多少钱 还有包吃包住吗 外卖小哥包吃包住那吃在哪里吃吃是要自己付钱嘛? 郑州,美团外卖送餐员,包住不有没有宿舍啥的 怀化市跑美团包吃住吗? 请问做美团外卖在哪个城市好?工资待遇怎么样的呢?包吃住吗? 美团外卖包吃包住吗 美团外卖元工月结,武汉市的怎么算,包住哪? 在58同城上找工作很多说是美团直聘人事部的说要招人,工作八小时工作八千多包住靠不靠谱? 广州做美团月薪大概多少。吃住包吗? 大家觉得我是做餐厅服务员好呢?一个月三千包吃包住。还是去做美团送餐好呢,不包吃不包住,而且我不认识 问一下,哪位网友知道在美团送外卖包吃包住么,底工资是多少且每单多少钱啦,提供送餐车吗?望干过的详解 怎样查到包吃包住的客栈?