介绍
在软件开发过程中,通常需要一定量的随机数据来测试系统或部分模块。为了节省时间和减小误差,开发人员通常需要利用开发工具提供的数据生成器来快速生成大量的测试数据。在MSSQL的世界中,可以利用一些内置的函数快速生成随机数据,本文将介绍如何利用MSSQL生成随机数据。
MSSQL内置函数
MSSQL内置函数可以帮助我们快速生成随机数据,下面列出一些常用的函数。
ABS函数
AB函数可以返回参数的绝对值。例如:
SELECT ABS(-10) -- 输出10
RAND函数
RAND函数返回大于等于 0 小于 1 的一个随机浮点数值。例如:
SELECT RAND() -- 输出 0.20481
CHECKSUM函数
CHECKSUM函数返回校验和结果,对于相同的参数,结果将始终相同。例如:
SELECT CHECKSUM('Hello World') -- 输出 1977053610
NEWID函数
NEWID函数返回一个唯一的全局标识符(GUID)。例如:
SELECT NEWID() -- 输出 2C220F58-8B27-43AF-9EF7-F4EA75672CF6
DATEADD函数
DATEADD函数返回给定日期部分的和。例如:
SELECT DATEADD(DAY, 1, '2022-01-01') -- 返回2022-01-02
快速生成随机整数
利用上面提到的RAND函数,可以快速生成随机整数。例如,要在1到100之间生成随机整数,可以使用以下代码:
SELECT CAST(RAND()*(100-1)+1 AS INT)
上面的代码中,RAND()*(100-1)+1生成1到100之间的随机小数,CAST函数将其转换为整数类型。运行多次上面的语句,可以得到不同的随机整数。
快速生成随机字符串
利用上面提到的CHECKSUM函数可以快速生成随机字符串。例如,要生成6位长度的随机字符串,可以使用以下代码:
SELECT SUBSTRING(CAST(CHECKSUM(NEWID()) AS NVARCHAR(255)),1,6)
上面的代码中,NEWID()生成唯一的GUID,CHECKSUM函数返回其校验和,CAST函数将其转换为NVARCHAR类型,SUBSTRING函数截取前6位。运行多次上面的语句,可以得到不同的随机字符串。
快速生成随机日期时间
利用上面提到的DATEADD函数和RAND函数可以快速生成随机日期时间。例如,要生成在2022年1月1日到2022年12月31日之间的随机日期时间,可以使用以下代码:
SELECT DATEADD(SECOND, CAST(RAND()*(DATEDIFF(SECOND, '2022-01-01', '2022-12-31')) AS INT), '2022-01-01')
上面的代码中,DATEDIFF函数返回两个日期之间的秒数差,RAND()*(秒数差)生成秒数差内的随机数,DATEADD函数将其加到起始日期上得到随机日期时间。运行多次上面的语句,可以得到不同的随机日期时间。
快速生成随机地址
利用上面提到的RAND函数和字符串连接可以快速生成随机地址。例如,要生成随机地址,可以使用以下代码:
DECLARE @province TABLE (id INT IDENTITY, name NVARCHAR(MAX))
DECLARE @city TABLE (id INT IDENTITY, province_id INT, name NVARCHAR(MAX))
DECLARE @county TABLE (id INT IDENTITY, city_id INT, name NVARCHAR(MAX))
INSERT INTO @province SELECT '北京' UNION ALL SELECT '上海' UNION ALL SELECT '广东'
INSERT INTO @city SELECT 1, '北京市' UNION ALL SELECT 2, '上海市' UNION ALL SELECT 3, '广州市' UNION ALL SELECT 3, '深圳市'
INSERT INTO @county SELECT 1, '东城区' UNION ALL SELECT 1, '西城区' UNION ALL SELECT 1, '朝阳区' UNION ALL SELECT 2, '黄浦区' UNION ALL SELECT 2, '徐汇区' UNION ALL SELECT 2, '长宁区' UNION ALL SELECT 3, '天河区' UNION ALL SELECT 3, '荔湾区' UNION ALL SELECT 3, '海珠区' UNION ALL SELECT 4, '福田区' UNION ALL SELECT 4, '罗湖区'
SELECT TOP 1 p.name + c.name + co.name + CAST(RAND()*(999-1)+1 AS NVARCHAR(255)) + '号' as address
FROM @province p, @city c, @county co
WHERE p.id=c.province_id AND c.id=co.city_id
ORDER BY NEWID()
上面的代码中,首先定义了三个表变量,分别代表省、市、区县。随后插入一些随机的省、市、区县数据。最后从三个表中查询到一条随机的地址数据,运行多次上面的语句,可以得到不同的随机地址。
结论
MSSQL提供了强大的函数支持,可以很方便地生成随机数据,上面介绍了一些常用的函数,包括快速生成随机整数、随机字符串、随机日期时间和随机地址。希望本文能够对开发人员在测试和部分模块中提供帮助。