mssql中利用随机函数生成随机数

介绍

在mssql中,可以利用内置的随机函数生成随机数。随机数是一种在程序设计和算法中经常使用的数值,它的产生是不可预知的,是随机的。在某些场景下,我们会需要随机数,比如生成随机验证码、生成测试数据等。

生成随机整数

使用RAND()函数

RAND()函数可以生成一个0到1之间的随机浮点数,我们可以通过它来生成随机整数。比如我们要生成1到10之间的随机整数,可以使用下面的代码:

DECLARE @rand INT;

SET @rand = CAST(RAND()*10 AS INT) + 1;

SELECT @rand;

上面的代码首先生成一个0到1之间的随机浮点数,然后将其乘以10并向下取整,这样就得到了一个0到9之间的整数。最后再加1,就可以生成1到10之间的随机整数。我们可以将生成随机整数的代码封装成一个存储过程,方便在其他地方调用:

CREATE PROCEDURE [dbo].[usp_GenerateRandomNumber]

@min INT,

@max INT

AS

DECLARE @rand INT;

SET @rand = CAST(RAND()*(@max - @min +1) AS INT) + @min;

SELECT @rand;

GO

上面的代码创建了一个名为usp_GenerateRandomNumber的存储过程,可以通过传入最小值@min和最大值@max来生成一个介于两者之间的随机整数。

使用CHECKSUM(NEWID())函数

除了使用RAND()函数,还可以使用CHECKSUM(NEWID())函数来生成随机整数。比如我们要生成1到10之间的随机整数,可以使用下面的代码:

DECLARE @uuid uniqueidentifier = NEWID();

DECLARE @lucky_number INT

SET @lucky_number = (ABS(CHECKSUM(@uuid)) % 10) + 1;

SELECT @lucky_number;

上面的代码首先使用NEWID()函数生成一个唯一的GUID字符串,然后计算其校验和。通过取其绝对值并对10求模,就可以得到1到10之间的随机整数。

生成随机字符串

使用CHAR()函数

可以用CHAR()函数来生成随机字符串。比如我们要生成一个长度为6的随机字符串,可以使用下面的代码:

DECLARE @random_string VARCHAR(6);

SET @random_string = CHAR(

FLOOR(RAND()*26) + 65,

FLOOR(RAND()*26) + 65,

FLOOR(RAND()*26) + 65,

FLOOR(RAND()*26) + 65,

FLOOR(RAND()*26) + 65,

FLOOR(RAND()*26) + 65

);

SELECT @random_string;

上面的代码中,每个CHAR()函数调用都会返回一个随机字符。我们用FLOOR(RAND()*26) + 65来生成随机的大写字母,65表示大写字母A的ASCII码。

使用NEWID()函数

除了使用CHAR()函数,还可以使用NEWID()函数来生成随机字符串。比如我们要生成一个长度为8的随机字符串,可以使用下面的代码:

DECLARE @uuid uniqueidentifier = NEWID();

DECLARE @random_string VARCHAR(8)

SET @random_string = REPLACE(CONVERT(NVARCHAR(36), @uuid), '-', '');

SELECT SUBSTRING(@random_string, 0, 8);

上面的代码首先使用NEWID()函数生成一个唯一的GUID字符串。然后我们需要把其中的连字符去掉,并只保留前8个字符。

结语

在本文中,我们介绍了在mssql中如何利用随机函数来生成随机数。除了生成随机整数和随机字符串之外,还可以通过这些函数来生成更加复杂的随机数据。

数据库标签