我想知道,是否有某种方法可以在mysql / sql中改组字符串的字母,即类似 伪代码的内容 :SELECT SHUFFLE('abcdef')?
SELECT SHUFFLE('abcdef')
从http://dev.mysql.com/doc/refman/5.0/en/string- functions.html找不到任何内容,对其进行搜索似乎只是找到改组结果的解决方案,而不是字符串。
干得好:
DELIMITER // DROP FUNCTION IF EXISTS shuffle // CREATE FUNCTION shuffle( v_chars TEXT ) RETURNS TEXT NOT DETERMINISTIC -- multiple RAND()'s NO SQL SQL SECURITY INVOKER COMMENT '' 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)