介绍
在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中如何利用随机函数来生成随机数。除了生成随机整数和随机字符串之外,还可以通过这些函数来生成更加复杂的随机数据。