首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成从3到6的随机int值

生成从3到6的随机int值
EN

Stack Overflow用户
提问于 2011-10-24 15:47:44
回答 10查看 164.2K关注 0票数 127

是否可以在中生成从Min到Max的随机int值(3-9示例,15-99 e.t.c)

我知道,我可以生成从0到最大值,但是如何增加Min边框?

此查询生成从1到6的随机值。需要将其从3更改为6。

代码语言:javascript
运行
复制
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number 
FROM information_schema.tables

添加了5秒后的

代码语言:javascript
运行
复制
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number 
FROM information_schema.tables
EN

回答 10

Stack Overflow用户

发布于 2013-08-23 17:33:04

一个有用的编辑器在每个语句之前添加了'Select‘,但是这个条目的要点是它可以为返回中的每一行生成唯一的键,而不仅仅是一个条目(为此,我将使用Rand()函数)。例如:从tblExample中选择top 100 Rand(),*

将对所有100行返回相同的随机值。

While:选择top 100 ABS(校验和(NEWID())% 10),*来自tbl示例

将在返回的每一行上返回不同的随机值(0到9)。因此,虽然select使复制和粘贴变得更容易,但如果需要的话,可以将逻辑复制到select语句中。

这将在0-9之间生成一个随机数。

代码语言:javascript
运行
复制
SELECT ABS(CHECKSUM(NEWID()) % 10)

1至6

代码语言:javascript
运行
复制
SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3至6

代码语言:javascript
运行
复制
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

动态(基于Eilert Hjelmeseth的评论-感谢jiraiya提供可视化演示)

代码语言:javascript
运行
复制
SELECT ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min

根据评论意见更新:

  • NEWID生成随机字符串(作为回报的每一行)
  • CHECKSUM接受字符串的值并创建数字
  • 模(%)除以该数并返回余数(意味着最大值比所使用的数少一个)
  • ABS将阴性结果改为阳性结果
  • 然后在结果中添加一个以消除0的结果(以模拟骰子滚动)
票数 252
EN

Stack Overflow用户

发布于 2011-10-24 15:54:10

我看到您在Server 2008中为您的问题添加了一个答案,您也可以这样做

代码语言:javascript
运行
复制
SELECT 3 + CRYPT_GEN_RANDOM(1) % 4 /*Random number between 3 and 6*/ 
FROM ...

这种方法的一些缺点是

  1. 这比NEWID()方法慢
  2. 即使每一行计算一次,查询优化器也没有意识到这是哪个会导致奇怪的结果

但我只是想把它作为另一种选择。

票数 14
EN

Stack Overflow用户

发布于 2011-10-24 15:58:51

你可以这样做:

代码语言:javascript
运行
复制
DECLARE @maxval TINYINT, @minval TINYINT
select @maxval=24,@minval=5

SELECT CAST(((@maxval + 1) - @minval) *
    RAND(CHECKSUM(NEWID())) + @minval AS TINYINT)

这是直接从此链接那里得到的,我真的不知道如何对这个答案给予适当的信任。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7878287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档