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

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

我有一个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#

这不漂亮,但我工作。

  1. SELECT name,
  2. replace(
  3. replace(
  4. replace(
  5. replace(
  6. replace(
  7. replace(
  8. name,'a',mid('aeiuoy',rand()*5+1,1))
  9. ,'e',mid('aeiuoy',rand()*5+1,1))
  10. ,'i',mid('aeiuoy',rand()*5+1,1))
  11. ,'u',mid('aeiuoy',rand()*5+1,1))
  12. ,'o',mid('aeiuoy',rand()*5+1,1))
  13. ,'y',mid('aeiuoy',rand()*5+1,1))
  14. as codedname
  15. FROM names;

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

  1. CREATE FUNCTION `fReplaceVowels`(s varchar(255)) RETURNS varchar(255) CHARSET latin1
  2. BEGIN
  3. declare v_max int unsigned;
  4. declare v_counter int unsigned default 1;
  5. declare result varchar(255);
  6. set result = s;
  7. set v_max = LENGTH(s);
  8. while v_counter < v_max do
  9. if (select binary 'aeiuoy' like concat('%', mid(s,v_counter,1),'%') ) then
  10. set result=concat(left(result,v_counter-1),mid('aeiuoy',rand()*5+1,1),mid(result,v_counter+1));
  11. end if;
  12. if (select binary 'AEIUOY' like concat('%', mid(s,v_counter,1),'%') ) then
  13. set result=concat(left(result,v_counter-1),mid('AEIUOY',rand()*5+1,1),mid(result,v_counter+1));
  14. end if;
  15. set v_counter=v_counter+1;
  16. end while;
  17. RETURN result;
  18. END

像这样使用:

  1. SELECT name, fReplaceVowels(name) as codedname FROM names;
展开查看全部
yhived7q

yhived7q2#

像这样的办法行得通,

  1. select translate('The quick brown fOx jumps ovEr the lazy
  2. dog','aeiouAEIOU','eiouaEIOUA');
  3. translate
  4. ---------------------------------------------
  5. Thi qaock bruwn fUx jamps uvIr thi lezy dug
  6. ``` `translate(column, to_string, from_string)` -对于from\ u string,可以按任意顺序指定字母。请参阅此处的文档
  7. 但是一个字符只能被一个字符替换,即“a”将被“e”替换,等等。

相关问题