在SQL Server中将x位随机数转换为varchar

时间:2017-01-12 11:48:10

标签: sql sql-server sql-server-2008-r2 data-conversion

我使用以下查询在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()),那么也要告诉它。

4 个答案:

答案 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