干得好:
DELIMITER //DROP FUNCTION IF EXISTS shuffle //CREATE FUNCTION shuffle( v_chars TEXT)RETURNS TEXTNOT DETERMINISTIC -- multiple RAND()'sNO SQLSQL SECURITY INVOKERCOMMENT ''BEGIN DECLARE v_retval TEXT DEFAULT ''; DECLARE u_pos INT UNSIGNED; DECLARE u INT UNSIGNED; SET u = LENGTH(v_chars); WHILE u > 0 DO SET u_pos = 1 + FLOOR(RAND() * u); SET v_retval = CONCAt(v_retval, MId(v_chars, u_pos, 1)); SET v_chars = CONCAt(LEFt(v_chars, u_pos - 1), MId(v_chars, u_pos + 1, u)); SET u = u - 1; END WHILE; RETURN v_retval;END;//DELIMITER ;SELECT shuffle('abcdef');有关输出,请参见sqlfiddle.com。
已使用mariadb 10.1成功测试(相当于mysql 5.6)



