Case-insensitive REPLACE in MySQL?

后端 未结 8 2151
無奈伤痛
無奈伤痛 2020-12-05 10:00

MySQL runs pretty much all string comparisons under the default collation... except the REPLACE command. I have a case-insensitive collation and need to run a

8条回答
  •  北海茫月
    2020-12-05 10:44

    I like to use a search and replace function I created when I need to replace without worrying about the case of the original or search strings. This routine bails out quickly if you pass in an empty/null search string or a null replace string without altering the incoming string. I also added a safe count down just in case somehow the search keep looping. This way we don't get stuck in a loop forever. Alter the starting number if you think it is too low.

    delimiter //
    
    DROP FUNCTION IF EXISTS `replace_nocase`//
    
    CREATE FUNCTION `replace_nocase`(raw text, find_str varchar(1000), replace_str varchar(1000)) RETURNS text
    CHARACTER SET utf8
    DETERMINISTIC
    BEGIN
        declare ret text;
        declare len int;
        declare hit int;
        declare safe int;
        
        if find_str is null or find_str='' or replace_str is null then
            return raw;
        end if;
    
        set safe=10000;
        set ret=raw;
        set len=length(find_str);
        
        set hit=LOCATE(find_str,ret);
        while hit>0 and safe>0 do
            set ret=concat(substring(ret,1,hit-1),replace_str,substring(ret,hit+len));
            set hit=LOCATE(find_str,ret,hit+1);
            set safe=safe-1;
        end while;
        
    
        return ret;
    END//
    

提交回复
热议问题