取随机数

shishui508 2009-02-27 10:02:56
Select Cast(RAND() * 10000 As Int)

abs(CHECKSUM(NEWID())%10000)

请问
这两者取随机数有什么区别?哪种更好,还有其它方式吗??
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐_石头 2009-02-27
  • 打赏
  • 举报
回复
sql server生成1000-9999之间的随机数或一个日期区间随机日期 
==产生数字区间随机数==
--创建视图
create view myview as select re=rand()

--自定义函数:取得指定范围的随机数
create function mydata(
@a int,
@b int)
returns decimal(38,0)
as
begin
declare @r decimal(38,0)
select @r=cast(re*(@b-@a)+@a as decimal(38,0)) from myview
return(@r)
end
go

--调用(可以随意指定你要的数据范围)
select user_no,dbo.mydata(1000,9999) number from table1

--可以在你原来的查询基础上增加一列number,如不增加列,
--那就把上面的结果放入一个临时表 #a,然后update
--如:
update table1 set number1=a.number from #a a,table1 b where a.user_no=b.user_no


=========================================
==产生日期区间随机日期==
select cast(dbo.mydata(1993,1985) as nvarchar(4))+'-'+cast(dbo.mydata(12,1) as nvarchar(2))+'-'+cast(dbo.mydata(30,1) as nvarchar(2))

select dateadd(dd,datediff(dd,'2008-05-01','2008-06-30')*RAND(),'2008-05-01')
2008-05-01换为起始日期
2008-06-30换为结束日期
dawugui 2009-02-27
  • 打赏
  • 举报
回复
仅仅从你给的两个语句来看,第一个比第二个好.
liangCK 2009-02-27
  • 打赏
  • 举报
回复
RAND() 是产生伪随机数..产生重复数的机会很多
NEWID() 如果机器有网卡的时候..会产生全球唯一的标识..没有网卡时.会产生机器内唯一的标识..再搭配CHECKSUM就可以产生重复性很低的随机数.
dawugui 2009-02-27
  • 打赏
  • 举报
回复
关键在于你想取怎样的随机数?
claro 2009-02-27
  • 打赏
  • 举报
回复
帮顶。
幸运的意外 2009-02-27
  • 打赏
  • 举报
回复
都差不多,没有啥细致的区别。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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