用随机元音替换mysql列中的所有元音

wyyhbhjk  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(322)

我有一个mysql数据库和表客户机,并希望隐藏我的敏感数据(将数据库提供给开发人员),用随机元音替换firstname和lastname列的所有元音。
因此,字符串中的所有“a”、“e”、“i”、“o”、“u”都应替换为“a”、“e”、“i”、“o”、“u”组中的随机字母。
同样地,所有的“a”、“e”、“i”、“o”、“u”应替换为“a”、“e”、“i”、“o”、“u”组中的随机字母。
谢谢你的回答。

4c8rllxm

4c8rllxm1#

这不漂亮,但我工作。

SELECT name,
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
        name,'a',mid('aeiuoy',rand()*5+1,1))
            ,'e',mid('aeiuoy',rand()*5+1,1))
            ,'i',mid('aeiuoy',rand()*5+1,1)) 
            ,'u',mid('aeiuoy',rand()*5+1,1)) 
            ,'o',mid('aeiuoy',rand()*5+1,1)) 
            ,'y',mid('aeiuoy',rand()*5+1,1)) 
        as codedname
FROM names;

如果要更随机地替换,应创建如下函数:

CREATE FUNCTION `fReplaceVowels`(s varchar(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
declare v_max int unsigned;
declare v_counter int unsigned default 1;
declare result varchar(255);

set result = s;
set v_max = LENGTH(s);

  while v_counter < v_max do
    if (select binary  'aeiuoy' like concat('%', mid(s,v_counter,1),'%') ) then
        set result=concat(left(result,v_counter-1),mid('aeiuoy',rand()*5+1,1),mid(result,v_counter+1));
    end if;
    if (select binary  'AEIUOY' like concat('%', mid(s,v_counter,1),'%') ) then
        set result=concat(left(result,v_counter-1),mid('AEIUOY',rand()*5+1,1),mid(result,v_counter+1));
    end if;
    set v_counter=v_counter+1;
  end while;
RETURN result;
END

像这样使用:

SELECT name, fReplaceVowels(name) as codedname FROM names;
yhived7q

yhived7q2#

像这样的办法行得通,

select translate('The quick brown fOx jumps ovEr the lazy 
dog','aeiouAEIOU','eiouaEIOUA');

                  translate                  
---------------------------------------------
 Thi qaock bruwn fUx jamps uvIr thi lezy dug
``` `translate(column, to_string, from_string)` -对于from\ u string,可以按任意顺序指定字母。请参阅此处的文档
但是一个字符只能被一个字符替换,即“a”将被“e”替换,等等。

相关问题