发布网友 发布时间:2022-04-24 14:07
共1个回答
热心网友 时间:2023-10-15 17:14
代码如下: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