我需要在数据库中插入随机数据进行测试,并且需要生成一个长度为 27 个字符的数字字符串(可以从 0 开始)。
我一直在研究
NEWID()
,但它也包含字母,与NEWSEQUENTIALID()
相同。
到目前为止,我的方法是创建一个 while 循环,随机生成每个数字并将其连接起来,但这似乎是一种非常慢的方法。
我正在使用 MSSQL 2014。
基于此方法的可能解决方案(使用
CHECKSUM()
和NEWID()
):
CREATE TABLE TestTable(RandomNumber varchar(27))
DECLARE @length int = 27
;WITH rCTE AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1
FROM rCTE
WHERE n < @length
)
INSERT INTO TestTable(RandomNumber)
VALUES ((SELECT ABS(CHECKSUM(NEWID())) % 10 FROM rCTE FOR XML PATH('')))
-- For SQL Server 2017+
-- VALUES ((SELECT STRING_AGG(ABS(CHECKSUM(NEWID())) % 10, '') FROM rCTE))
我正在使用 presto,并且我找到了这个解决方案:
SELECT LPAD(CAST(RANDOM(1000000000) AS VARCHAR), 27, '0')