mysql获取枚举的随机值实践
作者:Shelly0307
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');
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
