我有一个mysql数据库和表客户机,并希望隐藏我的敏感数据(将数据库提供给开发人员),用随机元音替换firstname和lastname列的所有元音。因此,字符串中的所有“a”、“e”、“i”、“o”、“u”都应替换为“a”、“e”、“i”、“o”、“u”组中的随机字母。同样地,所有的“a”、“e”、“i”、“o”、“u”应替换为“a”、“e”、“i”、“o”、“u”组中的随机字母。谢谢你的回答。
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 codednameFROM names;
SELECT name,
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 latin1BEGINdeclare 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
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));
set v_counter=v_counter+1;
end while;
RETURN result;
END
像这样使用:
SELECT name, fReplaceVowels(name) as codedname FROM names;
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”替换,等等。
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”替换,等等。
2条答案
按热度按时间4c8rllxm1#
这不漂亮,但我工作。
如果要更随机地替换,应创建如下函数:
像这样使用:
yhived7q2#
像这样的办法行得通,