Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql获取枚举的随机值

mysql获取枚举的随机值实践

作者:Shelly0307

在MySQL中,可以使用EL和FLOOR函数结合实现从ENUM类型中随机选择值值,通过生成随机索引并使用ELLTT函数获取相应位置的值值,此方法适用于少量和大量数据场景

1.需求描述

在MySQL中,您可以使用ENUM类型定义列,并且可以从中选择随机值。但是,MySQL不支持直接从ENUM中随机选择值的函数。

您可以使用ELT函数结合FLOOR和RAND函数来实现这一点。

2.使用到的函数

elt函数

mysql中elt函数是用于字符串处理的函数之一,它用于从给定的字符串列表中选择一个字符串,根据指定的索引位置来确定返回哪个字符串。

elt函数的语法为“elt(index, string1, string2, string3, …)”,其中,index是要选择的字符串的索引位置,string1, string2, string3, …是要进行选择的字符串列表

语法

ELT(index, string1, string2, string3, …)

示例

SELECT ELT(1,'Apple','Banana','Cherry'); -- Apple
SELECT ELT(3,'Apple','Banana','Cherry'); -- Cherry
SELECT ELT(4,'Apple','Banana','Cherry'); -- null

RAND() 函数

生成一个0到1的随机数

RAND() = 0.02871985549919294

FLOOR()函数

向下取整

FLOOR(3.6) = 3
FLOOR(4.1) = 4

3.解决方案

手写生成:少量数据

以下是一个示例,假设您有一个名为my_table的表,该表有一个my_enum的ENUM类型列,该列有三个可能的值:‘Value1’, ‘Value2’, ‘Value3’。

SELECT ELT(
    FLOOR(RAND() * 3) + 1,
    'Value1',
    'Value2',
    'Value3'
) AS random_enum_value;

这个查询首先使用RAND()函数生成一个0到1的随机数。然后,FLOOR()函数将这个随机数乘以3(因为您有3个ENUM值)并且取下限值,确保结果是一个0、1或2。

最后,ELT()函数使用这个计算出来的索引来返回相应位置的ENUM值。

从表中生成:多数据

如果您需要从表中随机选择一行,并获取其ENUM列的随机值,您可以使用类似的逻辑在SELECT查询中:

SELECT ELT(
  FLOOR(RAND() * (SELECT COUNT(*) FROM my_enum_column_options)) + 1,
  (SELECT value1 FROM my_enum_column_options),
  (SELECT value2 FROM my_enum_column_options),
  (SELECT value3 FROM my_enum_column_options)
) AS random_enum_value
FROM my_table
LIMIT 1;

在这个查询中,my_enum_column_options是一个包含所有ENUM值的虚拟表(您需要替换为您自己的查询)。

COUNT()用来获取ENUM值的数量,FLOOR(RAND() * COUNT())用来生成一个随机的索引,然后通过ELT()函数和子查询获取对应的ENUM值。

4.实战

随机生成分数表的分数,分数在【100,80,60,40】中随机选择

update t_score 
   set score = ELT(
        FLOOR(RAND() * 4) + 1,
        '100',
        '80',
        '60',
        '40');

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文