一个纯sql的问题(100分)

  • 主题发起人 主题发起人 icanfly
  • 开始时间 开始时间
I

icanfly

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用纯sql得到一个n-m间的随机数
 
select random(field) from table where field>n and field <m
不知道能不能实现你的要求
 
错了,你是在一个数据库表中随机吗?
如果是在数据库里应该好用的
 
再申明一下:在transact-sql中得到一个n-m之间的随机整数。似乎是不可能的。哪位super侠可指点。
 
用RAND函数。你自己查查帮助。
 
Sql Server 中Rand可以得到0..1之间的随机树,转换一下就可以得到其他范围了
 
RAND
返回 0 到1 之间的随机float 值。

语法
RAND ( [ seed ] )

参数
seed

是给出种子值或起始值的整型表达式(tinyint、smallint 或 int)。

返回类型
float

注释
在单个查询中反复调用 RAND() 将产生相同的值。

示例
下例产生 4 个通过 RAND 函数产生的不同的随机值。

DECLARE @counter smallint
SET @counter = 1
WHILE @counter < 5
BEGIN
SELECT RAND(@counter) Random_Number
SET NOCOUNT ON
SET @counter = @counter + 1
SET NOCOUNT OFF
END
GO

下面是结果集:

Random_Number
-------------------
0.71359199321292355

(1 row(s) affected)

Random_Number
-------------------
0.7136106261841817

(1 row(s) affected)

Random_Number
-------------------
0.71362925915543995

(1 row(s) affected)

Random_Number
-------------------
0.7136478921266981

(1 row(s) affected)

 
再说明一下:我希望用transact_sql得到一个1-15之间的随机数,然后用这个随机数
作为键值查询另外一张表,并且每次执行这个查询要产生不同的随机数。而rand得
到一个float值,如何得到一个整数?,还有,在同一个查询中产生得随机数是相同的。
对于我的工作而言,似乎是mission impossible.
体会:Microsoft transact-sql的功能比起Oracle sql*plus要差很多呀。
 
ceiling(rand()*15)
 
通常用 RAND 生成随机数的方法是,用相对不定的某个值作为种子值,例如累加 GETDATE 的几个部分:

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )

使用基于 GETDATE 的算法生成种子值时,如果在算法中所用的最小 datepart 的时间间隔内多次调用 RAND,RAND 仍会生成重复值。如果对 RAND 的调用包括在单个批处理中,尤其可能出现这种情况。在单个批处理中对 RAND 的多次调用可在同一毫秒(DATEPART 的最小增量)内执行。这种情况下,请用基于除时间之外的值以生成种子值。


CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

语法
使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])
 
IT书生兄:
非常感谢,发现sql的帮助有误导作用,没有说明rand没有seed的用法。
我在成都,希望能交个朋友,作为见面礼,加100分先。[:D]
 
后退
顶部