【发布时间】:2014-04-26 11:21:35
【问题描述】:
我需要在 TSQL 中创建一串随机数字
我想过HASH + CONVERT
但是转换适用于样式-例如,如果结果和表达式的数据类型都是 char(100),我不会展示我该怎么做
有什么建议吗?
【问题讨论】:
标签: sql-server string tsql random hash
我需要在 TSQL 中创建一串随机数字
我想过HASH + CONVERT
但是转换适用于样式-例如,如果结果和表达式的数据类型都是 char(100),我不会展示我该怎么做
有什么建议吗?
【问题讨论】:
标签: sql-server string tsql random hash
将@Length 设置为您需要的值。根据需要添加更多 sys.objects 副本。
DECLARE @Length INT
SET @Length = 10000
DECLARE @RandomDigits VARCHAR(MAX)
SET @RandomDigits = ''
SELECT TOP (@Length) @RandomDigits = @RandomDigits + RIGHT(CHECKSUM(NEWID()), 1)
FROM sys.objects a, sys.objects b, sys.objects c
SELECT @RandomDigits
【讨论】:
要获得 100 个随机数字的字符串,请将 CHECKSUM 的输出连接到 NEWID 函数:
select substring(list, 1, 100)
from (
select c as [text()]
from (
select cast(abs(checksum(newid())) as varchar(max)) as c
from sys.objects
) x
for xml path('')
) x(list)
【讨论】:
一种方法是使用递归 CTE:
with cte as (
select cast(right(checksum(newid()), 1) as varchar(8000)) as val, 1 as len
union all
select val + right(checksum(newid()), 1), len + 1
from cte
where len < 100
)
select *
from cte
where len = 100;
【讨论】:
如果位数小于或等于10,你可以复制下面的代码
DECLARE @digitsCount INT = 5;
SELECT RIGHT(CHECKSUM(NEWID()), @digitsCount)
【讨论】: