mysql 截取指定的两个字符串之间的内容_Mysql

如 现有字符串 "[]aseabcd[12345]ddxabcdsx[]",要截取"abcd[" 和 "abcd["之后的第一个 "]" 之间的内容 "12345",当然当中的内容长度不是固定的,可以是"123456" 或者其他字符串。
他问我的时候,我第一反应就是想的indexOf,后来查了下 发现mysql中没有indexOf 而是 locate。
经过半个多小时的尝试,最好帮他实现了这个效果。

复制代码 代码如下:

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)

时间: 2024-10-24 12:45:52

mysql 截取指定的两个字符串之间的内容_Mysql的相关文章

oc ios-oc中如何截取特定字符串中某两串字符串之间的字符串

问题描述 oc中如何截取特定字符串中某两串字符串之间的字符串 譬如{"name":"lxy","type":"学生","id":86,"psw":"123","nickName":"lxy","telephone":null,"email":null,"top":nul

asp截取指定英汉混合字符串_支持中文_应用技巧

说明:本函数作用是截取指定英汉混合字符串,并保持显示长度一至.就是将一个汉字当两英文来截取. 用途:一般会用在标题显示列表,可以避免截取的字符串参插不齐的现象. 程序代码 复制代码 代码如下: '//A_strString要处理的字符串 '//A_intLen以英文字符数为准 '//A_strAddString如果A_strString有截取字符时添中的后缀,如:...,可以为空 function CutString(byval A_strString,byval A_intLen,byval

js正则match()匹配两个元素之间的内容

我们先来看match()用法 语法  代码如下 复制代码 stringObject.match(searchvalue) stringObject.match(regexp) 在本例中,我们将使用全局匹配的正则表达式来检索字符串中的所有数字:  代码如下 复制代码 <script type="text/javascript"> var str="1 plus 2 equal 3" document.write(str.match(/d+/g)) <

shell-SHELL怎么实际现一个行内容 匹配两个字符之间的内容,一行有多个配置内容。

问题描述 SHELL怎么实际现一个行内容 匹配两个字符之间的内容,一行有多个配置内容. 举例说明:12aa34bb56aa78bb90匹配字符是aa bb 要取得aa bb之间的内容,34,78; 在这先谢谢大神们了. 解决方案 linux sed 替换两个字符之间的内容

MySQL的指定范围随机数函数rand()的使用技巧_Mysql

公式如下: rand() * (y-x) + x 咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数. 而在mysql里,随机数函数rand不能传参,产生的0到1之间的浮点数,要是我们需要在mysql产生大于1的随机整数,该怎么办呢? 这样的需求并不陌生,例如,咱做的文章系统,需要作弊,给文章的浏览量随机加上某个范围内的整数. 现在,假设需要产生234到5678之间的随机整数,mysql下怎么实现

Ext的TabPanel打开的两个tab之间js内容错乱

问题描述 Ext.onReady(function(){ Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); var viewport = new Ext.Viewport({ layout:'border', items:[ mainTabpanel, //将欢迎界面放入到ViewPort { region:'west', id:'west-panel', title:'导航菜单', split:true, width:

mysql中使用replace替换某字段的部分内容_Mysql

最近有个朋友提到如何使用sql来删除一个字段中部分内容,于是就写了这篇文章,简单记过: 测试表如下: 复制代码 代码如下: CREATE TABLE `t` (      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,      `domain` tinytext,      PRIMARY KEY (`id`)    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8  插入测试内容: 复制代

如何截取文本中特定字符串之间的数据

问题描述 如何截取文本中特定字符串之间的数据 输入: face=Arial.............不惜血本,以铺天盖地的广告提高知晓率...........................babababababababa 字符串: 开始字符串:face=Arial 结束字符串:babababababababa 输出: 输出上面两个字符串之间的数据. ?注:因为是从网上扒下来很多数据,要解析出特定字符串间的数据. 如何编程实现,或者用linux上的脚本也可以 解决方案 字符串函数就可以解决了

MySQL中字符串函数详细介绍_Mysql

符串或串(String)是由零个或多个字符组成的有限序列.一般记为 s='a1a2•••an'(n>=0).它是编程语言中表示文本的数据类型. 通常以串的整体作为操作对象,如:在串中查找某个子串.求取一个子串.在串的某个位置上插入一个子串以及删除一个子串等.两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等.设p.q是两个串,求q在p中首次出现的位置的运算叫做模式匹配.串的两种最基本的存储方式是顺序存储方式和链接存储方式. 下面我们来看看MySQL中的字符串函数 假如结果的长度