使用mysql/sql洗牌字符串
我想知道,是否有某种方法可以在mysql/sql中洗牌字符串的字母,例如类似伪代码的东西:选择洗牌'abcdef'使用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未签名; 设
无法从中找到任何内容,搜索它似乎只是找到了洗牌结果的解决方案,而不是字符串。标准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中不起作用