想要在MySQL数据库做到与Oracle函数substrb类似的功能,这个折磨了我半个月的问题终于解决了,自己写一个自定义函数,依据每个人的需求不一样可能得自己改改,我实现的是可以从第一个字符和最后一个字符开始截取。可能不是很完美,欢迎大家沟通指正。
DROP FUNCTION IF EXISTS substring_by_bytes;
DELIMITER $$
CREATE FUNCTION substring_by_bytes(str TEXT, len INT, from_last BOOLEAN)
RETURNS text
/* str --要截取的字符串
len --要截取的字节长度
from_last --是否从最后以为开始截,true表示从最后以为开始截
*/
BEGIN
DECLARE cur_len INT DEFAULT 1;
DECLARE cur_char CHAR(1) DEFAULT '';
DECLARE cur_byte_length INT DEFAULT 0;
DECLARE result VARCHAR(255) DEFAULT '';
IF from_last THEN
SET str = REVERSE(str);
END IF;
WHILE (cur_len < len+1 and cur_byte_length<len ) DO
SET cur_char = SUBSTRING(str, cur_len, 1);
if length(cur_char)=char_length(cur_char) then
SET result = CONCAT(result, cur_char);
elseif LENGTH(cur_char) = 3 and cur_byte_length + LENGTH(cur_char) < len+1 then
set result = CONCAT(result, cur_char);
elseif cur_byte_length + LENGTH(cur_char) > len then
set result = CONCAT(result, '');
end if;
SET cur_byte_length = cur_byte_length + LENGTH(cur_char);
SET cur_len = cur_len + 1;
END WHILE;
IF from_last THEN
SET result = REVERSE(result);
END IF;
RETURN result;
END$$
DELIMITER ;