将 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)
因为 RIGHT
将 bigint
隐式转换为 varchar
。
我正在使用以下查询在 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)
因为 RIGHT
将 bigint
隐式转换为 varchar
。