分享

SQL语言随机生成字符串的几种方法

 xinxin4312 2011-02-16
1.利用newid()产生的uniqueidentifier都是随机且唯一的:
declare @string nvarchar(100);
set @string =cast(newid() as nvarchar(100));
select @string;
go
2.利用rand()生成随机数字串:
declare @string nvarchar(100);
set @string =  right(str(rand(),8,6),2);
select @string;
go

3.利用rand()生成6位随机字符串:
declare   @sql   nvarchar(400) 
select      @sql= 'select   char( '+cONVERT(NVARCHAR,CONVERT(INT,26*rand())+97)+ ')+ 
CHAR( '+CONVERT(NVARCHAR,CONVERT(INT,rand()*26)+97)+ ')+ 
CHAR( '+CONVERT(NVARCHAR,CONVERT(INT,rand()*26)+97)+ ')+ 
CHAR( '+CONVERT(NVARCHAR,CONVERT(INT,rand()*26)+97)+ ')+ 
CHAR( '+CONVERT(NVARCHAR,CONVERT(INT,rand()*26)+97)+ ')+ 
CHAR( '+CONVERT(NVARCHAR,CONVERT(INT,rand()*26)+97)+ ') ' 
print   @sql 
EXEC(@sql) 
go

DECLARE   @Below   int 
DECLARE   @Up   int 
SELECT   @Below=65,@Up=90 
SELECT   CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 
    +CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 
    +CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 
    +CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 
    +CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 
    +CHAR(CAST(RAND()*(@Up-@Below)+@Below   AS   decimal(38,0))) 

go
SELECT   CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+ 
CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+ 
CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+ 
CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+ 
CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+ 
CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END)) 
go

4.编写可以产生随机字符串的存储过程:
--*********************
CREATE   VIEW   V_RAND   AS   SELECT   RAND1   =   CONVERT(INT,RAND()*26),RAND2   =   RAND()*2          
GO          
  
  
CREATE   FUNCTION   DBO.f_GetRandNum(@LEN   INT,@FLAG   INT) 
RETURNS   NVARCHAR(100) 
AS 
--@LEN   输出字符的长度 
--@FLAG   返回值包含字符   1:大写字母      2:小写字母      3:大小写字母混合 
BEGIN 
       DECLARE   @SQL   NVARCHAR(100),@RAND   INT 
       SELECT   @SQL   =    ' ' 
       IF   @LEN>100 
             SET @LEN   =   100 
  
       WHILE   @LEN>0    
       BEGIN 
             SELECT @RAND   =   RAND1 +(CASE   @FLAG   WHEN   1   THEN   65   WHEN   2   THEN   97 
                   ELSE(CASE WHEN RAND2 > 1 THEN   97   ELSE   65   END)   END) 
             FROM   V_RAND 
  
             SELECT   @SQL=@SQL + CHAR(@RAND),@LEN  = @LEN - 1 
       END 
  
       RETURN   @SQL 
END 
GO 
--调用存储过程  
SELECT   DBO.f_GetRandNum(7,2) 

(收集自:CSDN社区)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多