You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server生成随机整数1、2、3的查询语句运行原理咨询

这段SQL查询的运行逻辑拆解

你使用的原查询代码如下:

SELECT FLOOR(3 * RAND(CONVERT(varbinary, NEWID())))

执行逻辑(从内层到外层逐层运算)

  • 第一步:生成唯一随机值,调用NEWID()函数,每次执行都会生成一个唯一的UNIQUEIDENTIFIER类型值(即GUID,格式类似A6F4489A-264E-4E87-B19A-9D7C3E2A81B3),确保每一次运算的随机种子都不重复,避免同查询中多次调用返回相同随机结果。
  • 第二步:转换为种子兼容格式,通过CONVERT(varbinary, NEWID())把生成的GUID转换为二进制类型,符合RAND()函数对种子参数的类型要求。
  • 第三步:生成基础随机浮点数,调用RAND(二进制种子),传入上一步得到的二进制值作为随机种子,返回一个区间为大于等于0、小于1的浮点型随机数。
  • 第四步:放大随机数区间,把上一步得到的[0,1)区间浮点数乘以3,得到的结果范围变为大于等于0、小于3的浮点数,例如0.12、1.89、2.97都属于这个区间。
  • 第五步:向下取整得到整数结果,调用FLOOR()函数对[0,3)区间的浮点数做向下取整运算,最终得到的结果只能是0、1、2三个整数。

补充说明

如果你需要生成1、2、3的整数结果,当前查询的返回值是0、1、2,调整为如下写法即可满足需求:

SELECT FLOOR(3 * RAND(CONVERT(varbinary, NEWID()))) + 1

加1后结果范围就会偏移到1、2、3的区间。

内容的提问来源于stack exchange,提问作者suhas_patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:15:03