【问题标题】:how to generate a readable name in a SQL stored procedure?如何在 SQL 存储过程中生成可读的名称?
【发布时间】:2021-05-31 16:41:43
【问题描述】:

在存储过程中,我想生成一个“名称”字段以填充虚拟数据表。 我使用它并且它有效:

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 != SQL Server !!!选择其中之一...

标签: sql stored-procedures


【解决方案1】:

对于 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

【讨论】:

  • 谢谢,它有效。它接近我不起作用的解决方案。突然间,我更不明白自己出了什么问题。你知道我们是否可以一次使用数组类型变量吗?
  • 我混合了2个code SET @lenght=8+rand() *10; SET @nom=''; REPEAT SET @nom = CONCAT(@nom, CHAR(CEIL(RAND()*26+64))); SET @lenght = @lenght - 1; UNTIL @lenght<1 END REPEAT;
猜你喜欢
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2012-07-25
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多