mysql 截取指定的两个字符串之间的内容(locate,substring)
如需转帖,请写明出处 http://blog.csdn.net/slimboy123/archive/2009/07/30/4394782.aspx
今天我同事在用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)
mysql 截取指定的两个字符串之间的内容(locate,substring)的更多相关文章
- js 正则匹配 两个字符串之间,某个字符串之前(之后)的内容
1.js截取两个字符串之间的内容: var str = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert ...
- JS 从一个字符串中截取两个字符串之间的字符串
/************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...
- java string截取两个字符串之间的值
java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
- js截取两个字符串之间的子字符串
// 截取两个字符串之间的子字符串,返回第一个 function subStringOne(text, begin, end) { var regex; if (end == '\\n') regex ...
- PHP正则匹配到2个字符串之间的内容,匹配HTML便签内容
PHP正则匹配到2个字符串之间的内容 $preg= '/xue[\s\S]*?om/i'; preg_match_all($preg,"学并思网址xuebingsi.com",$r ...
- shell截取指定字符串之间的内容
#!/bin/bash#截取字符串 #path=ss/usr/share/src/root/home/admin path=ss/usr/share/src/root/home/admin/src/a ...
- python从字符串内取两个符号之间的内容
#取字符串中两个符号之间的东东 def txt_wrap_by(self,start_str, end, html): start = html.find(start_str) if start &g ...
- Levenshtein算法-比较两个字符串之间的相似度
package com.sinoup.util;/** * Created by Administrator on 2020-4-18. */ /** * @Title: * @ProjectName ...
- JS正则截取两个字符串之间的字符串
match方法 var str = "iid0000ffr"; var substr = str.match(/id(\S*)ff/); console.log(substr) 返 ...
随机推荐
- apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...
- JQgrid for asp.net
转载自http://blog.csdn.net/shiworkyue/article/details/8283716 JQgrid for asp.net 网上资料较少,自己总结了些不全,能用到的可 ...
- GPL协议的MySQL数据库
网络上多数朋友担心甲骨文会对MySQL软件采用收费模式,多数朋友也不清楚MySQL开源到底是什么模式,开源=免费嘛?是很多的疑问?MySQL是遵守双重协议的,一个是GPL授权协议,一个是商用授权协议( ...
- SQL Server集群服务器的优缺点
由二台或更多物理上独立的服务器共同组成的“虚拟”服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行S ...
- HTML、CSS选择题
Java EE软件工程师认证考试 试题库-选择题 一. 选择题(包括单选和双选) 1.D 以下( )是HTML常用的块状标签(选择一项) A. <span> B. < ...
- HTML5学习记录1-新特性
新特性 HTML5 中的一些有趣的新特性: 1. 用于绘画的 canvas 元素 2. 用于媒介回放的 video 和 audio 元素 3. 对本地离线存储的更好的支持 4. 新的特殊内容元素,比如 ...
- 有关PowerShell脚本你必须知道的十个基本概念
1.PS1文件 一个PowerShell脚本其实就是一个简单的文本文件,这个文件包含了一系列PowerShell命令,每个命令显示为独立的一行,对于被视为PowerShell脚本的文本文件,它的文件名 ...
- Android下利用Bitmap切割图片
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...
- 《Java并发编程实战》学习笔记 线程安全、共享对象和组合对象
Java Concurrency in Practice,一本完美的Java并发参考手册. 查看豆瓣读书 推荐:InfoQ迷你书<Java并发编程的艺术> 第一章 介绍 线程的优势:充分利 ...
- ubuntu下简单的驱动编译
转自:http://www.eefocus.com/jefby1990/blog/13-02/291628_c39b8.html 本文是参考了网上多篇帖子而写的算不上什么原创.唯一值得欣慰的只不过在本 ...