mysql 获取枚举的随机值
- 1.需求描述
- 2.使用到的函数
- elt函数
- 语法
- 示例
- RAND() 函数
- FLOOR()函数
- 3.解决方案
- 手写生成:少量数据
- 从表中生成:多数据
- 4.实战
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');