Juan Carlos Villamizar Alvarez Asked: 2020-03-30 11:26:29 +0800 CST 2020-03-30 11:26:29 +0800 CST 2020-03-30 11:26:29 +0800 CST 如何使用 SQL Server 生成随机数? 772 我需要生成一个介于 1 和 99 之间但没有小数的随机数。尝试select以下方法: SELECT RAMD () 1 AND 99 但同样给我在谷歌搜索错误,我不明白。 sql 3 Answers Voted Spank 2020-03-30T11:38:56+08:002020-03-30T11:38:56+08:00 我把例子留给你,希望对你有帮助 SELECT ROUND(((99 - 1) * RAND() + 1), 0) Best Answer Patricio Moracho 2020-04-03T05:07:06+08:002020-04-03T05:07:06+08:00 SQL Server 自 2005 版以来具有RAND()返回伪随机浮点数的函数。生成一定范围内的整数的方法是使用以下公式: SELECT FLOOR(RAND()*(end-start)+start); 在您的示例中,它将是这样的: SELECT FLOOR(RAND()*(99-1)+1); 重要的: RAND()接收到一个参数seed,即随机生成器的种子,我们必须考虑到,如果我们在任何时候指示某个种子,数字的生成总是相同的。这SELECT RAND(100), RAND(), RAND()将始终返回相同的三个数字。 要注意的另一件事RAND()是它是否在SELECT. 如果我们这样做:SELECT id, RAND() FROM Tabla我们将始终获得相同的数字,这是因为总是使用相同的种子,在这些情况下,解决方案是每行使用不同的值作为“种子”,它可能是ROW_NUMBER()但它可能太明显了,另一种选择是使用NEWID()如下:SELECT id, RAND(CAST( NEWID() AS varbinary)) FROM Tabla Ariel Ayala 2020-12-17T09:37:32+08:002020-12-17T09:37:32+08:00 第一个选项是使用 rand() 函数。我以下列方式使用它: declare @NumeroDesde int = 1000 ; declare @NumeroHasta int = 9999 ; SELECT ROUND(((@NumeroHasta - @NumeroDesde) * RAND() + @NumeroDesde), 0) 例如,生成一个 4 位代码。 使用校验和和 newid 函数的第二个选项: select abs(checksum(newid())) newid() 返回一个长字母数字值,校验和将其最小化,但有时它返回负值,因此使用 abs() 返回绝对值。
我把例子留给你,希望对你有帮助
SQL Server 自 2005 版以来具有
RAND()
返回伪随机浮点数的函数。生成一定范围内的整数的方法是使用以下公式:在您的示例中,它将是这样的:
重要的:
RAND()
接收到一个参数seed
,即随机生成器的种子,我们必须考虑到,如果我们在任何时候指示某个种子,数字的生成总是相同的。这SELECT RAND(100), RAND(), RAND()
将始终返回相同的三个数字。要注意的另一件事
RAND()
是它是否在SELECT
. 如果我们这样做:SELECT id, RAND() FROM Tabla
我们将始终获得相同的数字,这是因为总是使用相同的种子,在这些情况下,解决方案是每行使用不同的值作为“种子”,它可能是ROW_NUMBER()
但它可能太明显了,另一种选择是使用NEWID()
如下:SELECT id, RAND(CAST( NEWID() AS varbinary)) FROM Tabla
第一个选项是使用 rand() 函数。我以下列方式使用它:
例如,生成一个 4 位代码。
使用校验和和 newid 函数的第二个选项:
newid() 返回一个长字母数字值,校验和将其最小化,但有时它返回负值,因此使用 abs() 返回绝对值。