sql如何取随机数

wdxgdiy 2009-10-23 12:43:27
sql如何取随机数? 在 50 到 200之间随机取一个数 如何做呢?
...全文
628 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL codeselectRAND()/* 0.386438709040782*/selectRAND()*1000--这里乘1000 就是出来的数是白位数
/*497.731229818222*/selectCEILING(RAND()*1000)--ceiling 函数就是取整
/*742*/selectconvert(decimal(7,2),CEILING(RAND()*1000))-¡­
[/Quote]
这个我好像见过。。

wdxgdiy 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50
[/Quote]


是啊 要求 50~200之间 包括 50 和 200 应该怎样写呢?
wdxgdiy 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
SQL code生成区间随机数:selectcast((rand()*(@M-@N)+@N)asint)
[/Quote]


貌似 如果是 随机 1~3 永远随机不到3
SQL77 2009-10-23
  • 打赏
  • 举报
回复
SELECT FLOOR(RAND()*150)+50

这样不会取到200
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
生成区间随机数:


select cast((rand()*(@M-@N)+@N) as int)
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
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*/
liangCK 2009-10-23
  • 打赏
  • 举报
回复
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50
yanglinqiang 2009-10-23
  • 打赏
  • 举报
回复
学习了!
feixianxxx 2009-10-23
  • 打赏
  • 举报
回复

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,精度根据需要来取
SQL77 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fredrickhu 的回复:]
引用 12 楼 sql77 的回复:
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

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


可以
[/Quote]
呵呵,看错了,是在里面加的
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sql77 的回复:]
引用 10 楼 fredrickhu 的回复:
SQL code---试这个selectceiling((rand()*150+50))

这样总是取不到边界值的,取不到50
[/Quote]

可以
SQL77 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wdxgdiy 的回复:]
引用 11 楼 liangck 的回复:
[50,200]

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


能取到 50?
[/Quote]
晕,当然啦,难道没有能够除以151的?
wdxgdiy 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liangck 的回复:]
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50
[/Quote]

能取到 50?
SQL77 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liangck 的回复:]
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50
[/Quote]
SELECT FLOOR(RAND()*151)+50


思维限制了,哎,学习
fwacky 2009-10-23
  • 打赏
  • 举报
回复

select cast(rand()*150+50 as int)
SQL77 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fredrickhu 的回复:]
SQL code---试这个selectceiling((rand()*150+50))
[/Quote]
这样总是取不到边界值的,取不到50
liangCK 2009-10-23
  • 打赏
  • 举报
回复
[50,200]

SELECT ABS(CHECKSUM(NEWID())) % 151 + 50
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
---试这个
select ceiling((rand()*150+50))
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 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))-¡­

这个我好像见过。。


[/Quote]

这个就是你写的 我抄袭的 你个呆子
--小F-- 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wdxgdiy 的回复:]
引用 1 楼 liangck 的回复:
SELECT ABS(CHECKSUM(NEWID())) % 150 + 50



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

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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧