mysql 擷取指定的兩個字串之間的內容

2022-10-03 21:42:24 字數 2261 閱讀 5518

如 現有字串 "aseabcd[12345]ddxabcdsx",要擷取"abcd[" 和 "abcd["程式設計客棧之後的第乙個 "]" 之間的內容 "12345",當然當中的內容長度不是固定的,可以是"123456" 或者其他字串。

他問我的時候,我第一反應就是想的indexof,後來xctiwnpzj查了下 發現mysql中沒有indexof 而是 loxctiwnpzjcate。

經過半個多小時的嘗試,最好幫他實現了這個效果。

複製** **如下:

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]aass','abcd[',']',@result);

返回值 @result 為12345

call sp_str('abcd[sdww]aass','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', 'fooba程式設計客棧rbar',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 擷取指定的兩個字串之間的內容

本文位址:

MySql拼接兩個字串

mysql的查詢結果行欄位拼接,能夠用以下兩個函式實現 1.concat函式 mysql select concat 1 2 3 from test concat 1 2 3 123 假設連線串中存在null,則返回結果為null mysql select concat 1 2 null,3 fro...

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...