如 現有字串 "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...