Это не красиво, но я работаю.
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;