заменить все гласные в колонке mysql случайной гласной - PullRequest
0 голосов
/ 07 октября 2018

У меня есть база данных mysql с таблицей Clients и я хотел бы скрыть свои конфиденциальные данные (чтобы передать базу данных разработчику), заменив все гласные столбцов FirstName и LastName случайными гласными.

Таким образом, все «A», «E», «I», «O», «U», найденные в строке, должны быть заменены случайной буквой в группе «A», «E»,«I», «O», «U».

Идентично все «a», «e», «i», «o», «u» должны быть заменены случайной буквой в группе"a", "e", "i", "o", "u".

Спасибо за ответ.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Это не красиво, но я работаю.

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;
0 голосов
/ 07 октября 2018

Примерно так будет работать,

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_string вы можете указать алфавиты в любом порядке.См. Документацию здесь

Но символ может быть заменен только одним символом, то есть «а» будет заменен на «е» и т. Д.

...