将 SQL 服务器中的 x 位随机数转换为 varchar

Convert x digit random number to varchar in SQL Server

我正在使用以下查询在 SQL Server 2008 R2 中创建一个 14 位随机数:

select FLOOR(RAND() * POWER(CAST(10 as BIGINT), 14))

现在我需要将这个数字转换成 varchar,我使用这个查询:

select 
    convert(varchar(50), FLOOR(RAND() * POWER(CAST(10 as BIGINT), 14)))

它将数字转换为 6.74151e+013 形式。

所以我尝试了这个:

select 
    convert(varchar(50), FLOOR(RAND() * POWER(CAST(10 as BIGINT), 5))) +
    convert(varchar(50), FLOOR(RAND() * POWER(CAST(10 as BIGINT), 5))) + 
    convert(varchar(50), FLOOR(RAND() * POWER(CAST(10 as BIGINT), 4)))

它确实创建了一个 14 位的 varchar,但我觉得可以有更短的方法来做到这一点。我也尝试过其他各种方法,但它们 return 我无法使用的 6.74151e+013 格式的答案。

请帮忙。

编辑:如果有另一种直接创建 14 位随机数字字符串的方法(即不使用 rand()),那么也请说明。

而不是 FLOOR(),转换为 DECIMAL:

select CONVERT(DECIMAL(14, 0), RAND() * POWER(CAST(10 as BIGINT), 14))

然后将其转换为 varchar:

select CONVERT(VARCHAR(14), 
               CONVERT(DECIMAL(14, 0), RAND() * POWER(CAST(10 as BIGINT), 14))
              )

尝试:

select CONVERT(VARCHAR(14),CONVERT(BIGINT,FLOOR(RAND() * POWER(CAST(10 as BIGINT), 14))))

检查这个。

使用 NEWID() 。

    select cast(RIGHT(CAST(CAST(NEWID() AS VARBINARY(36)) AS BIGINT), 14) as varchar(50))

或 使用 rand()

      select convert(varchar(50),convert(numeric(14,0),rand() * 89999999999999))

我会使用 CRYPT_GEN_RANDOM,因为它允许指定您需要多少个随机字节。

然后,由于您需要十进制数字而不是十六进制数字,因此将结果转换为 bigint; 然后将其转换为 varchar 并取最后 14 位数字:

SELECT RIGHT(CAST(CAST(CRYPT_GEN_RANDOM(8) AS bigint) AS varchar(50)), 14)

这可以简化为:

SELECT RIGHT(CAST(CRYPT_GEN_RANDOM(8) AS bigint), 14)

因为 RIGHTbigint 隐式转换为 varchar