Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql/sql洗牌字符串_Mysql_Sql_String_Random - Fatal编程技术网

使用mysql/sql洗牌字符串

使用mysql/sql洗牌字符串,mysql,sql,string,random,Mysql,Sql,String,Random,我想知道,是否有某种方法可以在mysql/sql中洗牌字符串的字母,例如类似伪代码的东西:选择洗牌'abcdef' 无法从中找到任何内容,搜索它似乎只是找到了洗牌结果的解决方案,而不是字符串。标准SQL中没有任何内容-您最好编写一个用户定义的函数。给您: 分隔符// 如果存在随机播放,则删除函数// 创建函数洗牌 v_chars文本 返回文本 非确定性-多个兰德 无SQL SQL安全调用程序 议论 开始 声明v_retval文本默认值; 声明u_pos INT未签名; 声明u INT未签名; 设

我想知道,是否有某种方法可以在mysql/sql中洗牌字符串的字母,例如类似伪代码的东西:选择洗牌'abcdef'


无法从中找到任何内容,搜索它似乎只是找到了洗牌结果的解决方案,而不是字符串。

标准SQL中没有任何内容-您最好编写一个用户定义的函数。

给您:

分隔符// 如果存在随机播放,则删除函数// 创建函数洗牌 v_chars文本 返回文本 非确定性-多个兰德 无SQL SQL安全调用程序 议论 开始 声明v_retval文本默认值; 声明u_pos INT未签名; 声明u INT未签名; 设置u=长度v_字符; 当u>0时 做 设置u_pos=1+地板面积*u; 设置v_retval=CONCATv_retval,中间字符,u_位置,1; 设置v_chars=CONCATLEFTv_chars,u_pos-1,MIDv_chars,u_pos+1,u; 设置u=u-1; 结束时; 返回v_retval; 终止 // 定界符; 选择shuffle'abcdef'; 有关输出,请参阅


使用mariadb 10.1 mysql 5.6等效版本成功测试:此解决方案适用于Microsoft SQL Server

由于不允许在用户定义函数中使用RAND,我们创建了一个视图,以便稍后在我们的shuffle函数中使用它:

CREATE VIEW randomView
AS
SELECT RAND() randomResult
GO
实际的洗牌功能如下所示:

CREATE FUNCTION shuffle(@string NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) AS 
BEGIN

    DECLARE @pos INT 
    DECLARE @char CHAR(1)
    DECLARE @shuffeld NVARCHAR(MAX)
    DECLARE @random DECIMAL(18,18) 

    WHILE LEN(@string) > 0
        BEGIN
            SELECT @random = randomResult FROM randomView
            SET @pos = (CONVERT(INT, @random*1000000) % LEN(@string)) + 1
            SET @char = SUBSTRING(@string, @pos, 1)
            SET @shuffeld = CONCAT(@shuffeld, @char)

            SET @string = CONCAT(SUBSTRING(@string, 1, @pos-1), SUBSTRING(@string, @pos+1, LEN(@string)))
        END

    RETURN @shuffeld

END 
调用函数

DECLARE @string NVARCHAR(MAX) = 'abcdefghijklmnonpqrstuvwxyz0123456789!"§$%&/()='
SELECT dbo.shuffle(@string)

哇,真没想到会这样。我想到的是巧妙地使用某种字符串操作/rand select来操纵字符串。这超出了我的理解范围,但我当然要感谢你的努力!我会看看其他人会想出什么答案。有没有关于如何使用这样的函数声明的指针?是否可以将其作为mysql查询运行,然后使用该函数?我可以通过phpmyadmin添加这样的函数,从sql选项卡执行它吗?虽然这看起来是一个很好的解决方案,但我在这里受限于mysql4,因此此解决方案似乎不存在:/n您可以从phpmyadmin运行此解决方案,但不幸的是,您需要MySQL5.0或更高版本。是否需要其他配置或版本?获得了mysql 5.5.9,但在尝试运行sql时出现语法错误。请参阅。您得到的确切错误消息是什么?您可能应该添加您的答案与公认答案不同和/或优于公认答案的原因/方式公认的awnser在UDF中使用RAND,这在MSSQL中不起作用