如何在 SQL 存储过程中生成可读名称?
how to generate a readable name in a SQL stored procedure?
在存储过程中,我想生成一个 'name' 字段以填充虚拟数据 table。
我使用它并且有效:
SET @nom = CONV(FLOOR(RAND() * 99999999999999), 20, 36);
但由于这是一个名称字段,我希望只有字母,而不是字母和数字的混合体。
我想尝试这样的东西,但它不起作用
SET @lenght=8+rand() *10; -- Définit une longueur aléatoire compris entre 8 et 18 caractères
SET@nom='';
WHILE @lenght>0 DO
@nom = CONCAT(@nom, char(round(rand()*25+65,0)));
SET @lenght=@lenght -1;
END WHILE;
你有什么想法吗?
数组类型的变量不能用?
我本可以在循环的每次迭代中在数组变量中取一个随机字符
SET @vowel= ('a','e','i', 'o','u','y');
对于MySQL:
CREATE FUNCTION generate_random_word (len TINYINT UNSIGNED)
RETURNS VARCHAR(255)
BEGIN
DECLARE result VARCHAR(255) DEFAULT '';
REPEAT
SET result = CONCAT(result, CHAR(CEIL(RAND()*26+64)));
SET len = len - 1;
UNTIL !len END REPEAT;
RETURN result;
END
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e2732456d0d418b1b181a4352c534119
在存储过程中,我想生成一个 'name' 字段以填充虚拟数据 table。 我使用它并且有效:
SET @nom = CONV(FLOOR(RAND() * 99999999999999), 20, 36);
但由于这是一个名称字段,我希望只有字母,而不是字母和数字的混合体。 我想尝试这样的东西,但它不起作用
SET @lenght=8+rand() *10; -- Définit une longueur aléatoire compris entre 8 et 18 caractères
SET@nom='';
WHILE @lenght>0 DO
@nom = CONCAT(@nom, char(round(rand()*25+65,0)));
SET @lenght=@lenght -1;
END WHILE;
你有什么想法吗? 数组类型的变量不能用? 我本可以在循环的每次迭代中在数组变量中取一个随机字符
SET @vowel= ('a','e','i', 'o','u','y');
对于MySQL:
CREATE FUNCTION generate_random_word (len TINYINT UNSIGNED)
RETURNS VARCHAR(255)
BEGIN
DECLARE result VARCHAR(255) DEFAULT '';
REPEAT
SET result = CONCAT(result, CHAR(CEIL(RAND()*26+64)));
SET len = len - 1;
UNTIL !len END REPEAT;
RETURN result;
END
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e2732456d0d418b1b181a4352c534119