sql如何取随机数

时间:2022-11-28 04:40:39
sql如何取随机数?    在  50 到 200之间随机取一个数 如何做呢?

20 个解决方案

#1


SELECT ABS(CHECKSUM(NEWID())) % 150 + 50

#2


select RAND()
/*  0.386438709040782  */
select RAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/
select CEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/
select convert(decimal(7,2),CEILING(RAND()*1000))--用convert转换类型 确定精度用decimal(n,m)n表示有效数字的个数,M表示小数点后的位数
/*270.00*/
--或者
select convert(decimal(7,2),(RAND()*1000))
/*264.23*/

#3


生成区间随机数:


            select   cast((rand()*(@M-@N)+@N)   as   int)

#4


SELECT FLOOR(RAND()*150)+50

这样不会取到200

#5


引用 3 楼 fredrickhu 的回复:
SQL code生成区间随机数:selectcast((rand()*(@M-@N)+@N)asint)



貌似  如果是 随机 1~3  永远随机不到3

#6


引用 1 楼 liangck 的回复:
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50



是啊  要求 50~200之间 包括 50  和 200  应该怎样写呢?

#7


引用 2 楼 fredrickhu 的回复:
SQL codeselectRAND()/*  0.386438709040782*/selectRAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/selectCEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/selectconvert(decimal(7,2),CEILING(RAND()*1000))-¡­

这个我好像见过。。

#8


引用 6 楼 wdxgdiy 的回复:
引用 1 楼 liangck 的回复:
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50



是啊  要求 50~200之间 包括 50  和 200  应该怎样写呢?


select   ceiling((rand()*2+1)) 

#9


引用 7 楼 feixianxxx 的回复:
引用 2 楼 fredrickhu 的回复:
SQL codeselectRAND()/*  0.386438709040782*/selectRAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/selectCEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/selectconvert(decimal(7,2),CEILING(RAND()*1000))-¡­

这个我好像见过。。


这个就是你写的 我抄袭的 你个呆子

#10


---试这个
select   ceiling((rand()*150+50)) 

#11


[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50

#12


引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50

#13



select cast(rand()*150+50  as int)

#14


引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50

SELECT FLOOR(RAND()*151)+50


思维限制了,哎,学习

#15


引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50


能取到 50?

#16


引用 15 楼 wdxgdiy 的回复:
引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50


能取到 50?

晕,当然啦,难道没有能够除以151的?

#17


引用 12 楼 sql77 的回复:
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50


可以

#18


引用 17 楼 fredrickhu 的回复:
引用 12 楼 sql77 的回复:
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50


可以

呵呵,看错了,是在里面加的

#19



T-SQL中的随机数 

1、0-9间的随机整数,包括0和9本身: 

abs(checksum(newid()))%10 

扩展从a-b间的随机整数(a,b本身也是整数): 

a+abs(checksum(newid()))%(b-a+1) 

2、0-1间的随机实数: rand() 

--或是 rand(checksum(newid())) 

由此扩展从a-b间的随机实数: a+rand(checksum(newid()))*(b-a) 

注意上面的取法使得取值范围(a,b],若是想要取得(a,b),可以采用下面的表达式 

a+rand(checksum(newid()))*(b-a)*0.99999 -- 此处0.99999可以更换为0.999999999,精度根据需要来取

#20


学习了!

#1


SELECT ABS(CHECKSUM(NEWID())) % 150 + 50

#2


select RAND()
/*  0.386438709040782  */
select RAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/
select CEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/
select convert(decimal(7,2),CEILING(RAND()*1000))--用convert转换类型 确定精度用decimal(n,m)n表示有效数字的个数,M表示小数点后的位数
/*270.00*/
--或者
select convert(decimal(7,2),(RAND()*1000))
/*264.23*/

#3


生成区间随机数:


            select   cast((rand()*(@M-@N)+@N)   as   int)

#4


SELECT FLOOR(RAND()*150)+50

这样不会取到200

#5


引用 3 楼 fredrickhu 的回复:
SQL code生成区间随机数:selectcast((rand()*(@M-@N)+@N)asint)



貌似  如果是 随机 1~3  永远随机不到3

#6


引用 1 楼 liangck 的回复:
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50



是啊  要求 50~200之间 包括 50  和 200  应该怎样写呢?

#7


引用 2 楼 fredrickhu 的回复:
SQL codeselectRAND()/*  0.386438709040782*/selectRAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/selectCEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/selectconvert(decimal(7,2),CEILING(RAND()*1000))-¡­

这个我好像见过。。

#8


引用 6 楼 wdxgdiy 的回复:
引用 1 楼 liangck 的回复:
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50



是啊  要求 50~200之间 包括 50  和 200  应该怎样写呢?


select   ceiling((rand()*2+1)) 

#9


引用 7 楼 feixianxxx 的回复:
引用 2 楼 fredrickhu 的回复:
SQL codeselectRAND()/*  0.386438709040782*/selectRAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/selectCEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/selectconvert(decimal(7,2),CEILING(RAND()*1000))-¡­

这个我好像见过。。


这个就是你写的 我抄袭的 你个呆子

#10


---试这个
select   ceiling((rand()*150+50)) 

#11


[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50

#12


引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50

#13



select cast(rand()*150+50  as int)

#14


引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50

SELECT FLOOR(RAND()*151)+50


思维限制了,哎,学习

#15


引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50


能取到 50?

#16


引用 15 楼 wdxgdiy 的回复:
引用 11 楼 liangck 的回复:
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50


能取到 50?

晕,当然啦,难道没有能够除以151的?

#17


引用 12 楼 sql77 的回复:
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50


可以

#18


引用 17 楼 fredrickhu 的回复:
引用 12 楼 sql77 的回复:
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50


可以

呵呵,看错了,是在里面加的

#19



T-SQL中的随机数 

1、0-9间的随机整数,包括0和9本身: 

abs(checksum(newid()))%10 

扩展从a-b间的随机整数(a,b本身也是整数): 

a+abs(checksum(newid()))%(b-a+1) 

2、0-1间的随机实数: rand() 

--或是 rand(checksum(newid())) 

由此扩展从a-b间的随机实数: a+rand(checksum(newid()))*(b-a) 

注意上面的取法使得取值范围(a,b],若是想要取得(a,b),可以采用下面的表达式 

a+rand(checksum(newid()))*(b-a)*0.99999 -- 此处0.99999可以更换为0.999999999,精度根据需要来取

#20


学习了!

#21