如何用SQL为每一行均产生一个随机数

关键在于使用newid()得到一个基础的随机值
再使用checksum()得到一个数字型
再作为种子值使用rand()得到0~1之间的double类型值(18)
再就简单了,看各自的需求
例如,
如果是获取位数不限的随机数(最高16位,太多的话值后面就都是0,可以通过两个随机数连接),就乘以最高位数的10倍值,再通过ceiling()取整

select cast(ceiling(rand(checksum(newid()))*10) as int) as RndNum from 表名

如果获取位数一定的随机数(最高16位,太多的话值后面就都是0,可以通过两个随机数连接),因为rand()值可能得到的值非常小,位数不够
简单一点的做法就是直接加上10000000(几位就几个0),再取前几位

select left(cast(ceiling(rand(checksum(newid()))*1000000) as int)+100000,6) as RndNum from 表名

这样基本能够满足需求了,至于更复杂的限定值范围内的等等,建议使用函数处理,全部写在语句里面,阅读性太差

你可能感兴趣的:(如何用SQL为每一行均产生一个随机数)