随机获取表中指定列的数据

 

目标

指定表和表中某一列,随机获取这个表的这一列的某个值(我这里去除重复值)。

函数

DELIMITER $$
 
USE `数据库名字`$$
 
DROP FUNCTION IF EXISTS `rand_string`$$
 
CREATE DEFINER=`root`@`%` FUNCTION `rand_string`(var_string TEXT) RETURNS TEXT CHARSET utf8
BEGIN
/*根据逗号分隔字符串,统计有多少个字符串。*/
SET @num= LENGTH(var_string)-LENGTH(REPLACE(var_string,',',''))+1;
/*随机生成位置*/
SET @index= FLOOR(RAND()*@num)+1;
/*开始截取*/
SET @rand_start =SUBSTRING_INDEX(var_string,',',@index);
SET  @rand_end =SUBSTRING_INDEX(@rand_start,',',-1);
RETURN @rand_end ;
    END$$
 
DELIMITER ;

 

执行

SELECT rand_string( CONCAT((SELECT GROUP_CONCAT( DISTINCT 表字段) 
FROM 表名字))) rand_data;

/*
特别注意一般地GROUP_CONCAT()函数的默认处理字符长度是1024
如果该列的所有字段长度超过了GROUP_CONCAT()的限制,会报错:Row 52 was cut by GROUP_CONCAT()
可手动设置函数配置,我这里定义长度为1024*50
*/
SET GLOBAL group_concat_max_len = 1024*50;

用途

修改相关联的表数据。
特别注意:MYSQL函数和存储过程中不能动态执行字符串类型的SQL。

 

你可能感兴趣的:(MySQL)