SQL生成随机数的方法总结
一、SQL生成随机数组
有时候我们需要生成一个随机数组,SQL可以通过RAND()
函数来实现,代码如下:
SELECT RAND(), RAND(), RAND(), RAND(), RAND();
运行结果如下:
+-------------------+-------------------+-------------------+-------------------+-------------------+
| (No column name) | (No column name) | (No column name) | (No column name) | (No column name) |
+-------------------+-------------------+-------------------+-------------------+-------------------+
| 0.732931303303814 | 0.74820671508723 | 0.105758390980154 | 0.252249759248054 | 0.716748049206193 |
+-------------------+-------------------+-------------------+-------------------+-------------------+
使用RAND()
函数可以生成随机数,可以通过调节函数参数的值来改变数组的长度。
二、SQL生成随机数函数
SQL中使用NEWID()
函数可以随机生成唯一标识符GUID,代码如下:
SELECT NEWID();
运行结果如下:
+------------------------------------+
| (No column name) |
+------------------------------------+
| 56931D8B-D8B9-4E12-A5F5-72A5F9A4808C |
+------------------------------------+
此外,SQL还可以使用CHECKSUM(NEWID())+RAND()
函数来生成更加随机的数,代码如下:
SELECT CHECKSUM(NEWID())+RAND();
运行结果如下:
+-------------------+
| (No column name) |
+-------------------+
| 819817.2271732586 |
+-------------------+
三、SQL Server生成随机数
SQL Server也可以通过RAND()
函数来生成随机数,代码如下:
SELECT TOP 5 RAND() FROM sys.objects
运行结果如下:
+-------------------+
| (No column name) |
+-------------------+
| 0.328835954798927 |
| 0.81008264599312 |
| 0.168698469141455 |
| 0.819490681617023 |
| 0.854878276886284 |
+-------------------+
四、SQL生成随机数主键
当我们需要为表生成主键时,可以使用如下代码,用HASHBYTES()
函数生成一个唯一的哈希值:
ABS(CAST(
HASHBYTES('MD5', CAST(NEWID() AS varchar(36))) AS BIGINT))
% POWER(10, 9) AS RandomNumber
上述代码中,CAST(NEWID() AS varchar(36))
为将NEWID()
函数生成的唯一标识符转为字符串,HASHBYTES('MD5', CAST(NEWID() AS varchar(36)))
使用哈希算法MD5计算字符串的哈希值,最后CAST
函数将哈希值转为BIGINT
类型,用来保存数据。运行结果如下:
+-------------+
| RandomNumber |
+-------------+
| 814962981 |
| 997601035 |
| 48135846 |
| 669021128 |
| 625812846 |
+-------------+
五、SQL生成随机数字
如果我们需要生成指定位数的随机数字,可以使用如下代码:
SELECT LEFT(CAST(RAND() AS varchar(20)), @DigitCount) AS RandomNumber
其中@DigitCount
为指定的数字位数。运行结果如下:
+----------------+
| RandomNumber |
+----------------+
| 0.327442537481 |
+----------------+
六、SQL生成随机数字函数 sys.fn_RandomBytes
SQL还提供了内置的函数sys.fn_RandomBytes
,用于生成随机字节序列。代码如下:
SELECT sys.fn_RandomBytes(8)
运行结果如下:
+------+
| |
+------+
| 0xEC |
| 0xCB |
| 0x51 |
| 0x1F |
| 0x43 |
| 0x75 |
| 0xC2 |
| 0x3D |
+------+
七、SQL语句生成随机数
使用如下代码可以生成指定范围内的随机数:
SELECT RAND() * (@MaxValue - @MinValue) + @MinValue AS RandomNumber
其中@MaxValue
和@MinValue
为指定的随机数范围。运行结果如下:
+--------------+
| RandomNumber |
+--------------+
| 0.845346204 |
+--------------+
八、SQL语句生成32位随机数
SQL语句生成32位随机数代码如下:
SELECT UPPER(CONVERT(char(8), NEWID(), 1) + REPLACE(CONVERT(char(23), NEWID(), 1), '-', '')) AS RandomNumber
运行结果如下:
+----------------------------------+
| RandomNumber |
+----------------------------------+
| 850A80CF791D476C9DFCC423F8D7C57E |
+----------------------------------+
九、SQL随机数
使用如下代码可以生成0到1之间的随机数:
SELECT CAST(CRYPT_GEN_RANDOM(1) AS INT) % 100 AS RandomNumber
运行结果如下:
+--------------+
| RandomNumber |
+--------------+
| 80 |
+--------------+
结论
SQL中有多种方式可以生成随机数,我们可以根据具体的需求选择适合的方法。其中RAND()
函数是最常用的方法之一,可以生成较高质量的随机数,而NEWID()
函数则可以生成唯一的标识符,适用于主键生成等场景。