mysql按字节长度截取字符串

想要在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 ;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值