SQL 生成随机字符串

MySQL

use test;

set global log_bin_trust_function_creators=1;

delimiter $$
CREATE function rs(n int)
returns varchar(1024)
begin
declare chars char(62) default 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789';
declare res varchar(1024) default '';
declare i int default 0;
repeat
set i = i + 1;
set res = concat(res,substring(chars,floor(1+rand()*62),1));
until i=n end repeat;
return res;
end
$$

delimiter ;
select rs(10); 

SQLServer

方法一:和mysql类似使用rand()随机数

--第一步:创建视图
CREATE VIEW [dbo].[View_Rand]
AS
SELECT RAND() AS frand;
GO

--第二步:自定义的随机函数
CREATE FUNCTION [dbo].[Random](@n INT)
RETURNS INT
AS BEGIN
    SELECT @n=@n * frand FROM dbo.View_Rand;
    RETURN @n;
END;
GO

--第三步:生成字符串
CREATE FUNCTION rs(@n INT)
RETURNS VARCHAR(1024) BEGIN
    DECLARE @chars CHAR(62) ='abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE @res VARCHAR(1024) ='';
    DECLARE @i INT=0;
    WHILE(@i<@n)BEGIN
        SET @i=@i+1;
        SET @res=@res+SUBSTRING(@chars, FLOOR(1+dbo.Random(62)), 1);
    END;
    RETURN @res;
END;
GO

SELECT dbo.rs(10);

方法二:使用newid()随机数,结合checksum()使用

--第一步:创建视图
CREATE VIEW [dbo].[View_NewID]
AS
SELECT NEWID() AS frand;
GO

--第二步:自定义的随机函数
CREATE FUNCTION [dbo].[GetRandom](@n INT)
RETURNS INT
AS BEGIN
    SELECT @n=ABS(CHECKSUM(frand)%@n) FROM dbo.View_NewID;
    RETURN @n;
END;
GO

--第三步:生成字符串
CREATE FUNCTION getrs(@n INT)
RETURNS VARCHAR(1024) BEGIN
    DECLARE @chars CHAR(62) ='abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE @res VARCHAR(1024) ='';
    DECLARE @i INT=0;
    WHILE(@i<@n)BEGIN
        SET @i=@i+1;
        SET @res=@res+SUBSTRING(@chars, FLOOR(1+dbo.GetRandom(62)), 1);
    END;
    RETURN @res;
END;
GO

SELECT dbo.getrs(10);

 

转载于:https://www.cnblogs.com/Canyon/p/11208646.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值