如 現(xiàn)有字符串 "[]aseabcd[12345]ddxabcdsx[]",要截取"abcd[" 和 "abcd["之后的第一個 "]" 之間的內(nèi)容 "12345",當(dāng)然當(dāng)中的內(nèi)容長度不是固定的,可以是"123456" 或者其他字符串。
他問我的時候,我第一反應(yīng)就是想的indexOf,后來查了下 發(fā)現(xiàn)mysql中沒有indexOf 而是 locate。
經(jīng)過半個多小時的嘗試,最好幫他實現(xiàn)了這個效果。
復(fù)制代碼 代碼如下:
CREATE PROCEDURE sp_str
(
IN p_str VARCHAR(50), /*原始字符串*/
IN p_begin_str VARCHAR(50), /*要匹配的起始字符串*/
IN p_end_str VARCHAR(50)) /*要匹配的結(jié)束字符串*/
OUT p_result VARCHAR(50)) /*返回結(jié)果*/
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;
復(fù)制代碼 代碼如下:
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['))
)
新聞熱點
疑難解答
圖片精選