我使用以下查询在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,但我觉得可以采用更短的方式。我也尝试了其他各种方法,但他们以6.74151e+013
格式返回了我无法使用的答案。
请帮忙。
编辑:如果有另一种直接创建14位随机数字字符串的方法(即不使用rand()),那么也要告诉它。
答案 0 :(得分:2)
而不是style.className
,转换为FLOOR()
:
DECIMAL
然后将其转换为varchar:
select CONVERT(DECIMAL(14, 0), RAND() * POWER(CAST(10 as BIGINT), 14))
答案 1 :(得分:2)
尝试:
select CONVERT(VARCHAR(14),CONVERT(BIGINT,FLOOR(RAND() * POWER(CAST(10 as BIGINT), 14))))
答案 2 :(得分:1)
检查这个。
使用NEWID()。
select cast(RIGHT(CAST(CAST(NEWID() AS VARBINARY(36)) AS BIGINT), 14) as varchar(50))
OR 使用rand()
select convert(varchar(50),convert(numeric(14,0),rand() * 89999999999999))
答案 3 :(得分:1)
我使用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
。