关于SQL如何取随机数问题

比如要取中国所有省里的随机一个市,省为一个字段,市为一个字段,应该如何些? 可以这样吗?select top 1 * from province where province in (select * from china) order by newid()

Oracle的随机数产生函数(DBMS_RANDOM )
2007-10-17 17:12
Oracle8 8.0版介绍了DBMS_RANDOM包,Oracle8i 8.1.6版介绍了DBMS_RANDOM包的新功能,但Oracle8i 文档中没有详细全面介绍其功能。幸运的是:有一个新的DBMS_RANDOM包函数能够返回0-1之间的随机数。这个新函数是:
◆ FUNCTION value RETURN NUMBER;
◆ FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
◆ FUNCTION normal RETURN NUMBER;
◆ FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;

VALUE函数的第一种形式返回一个大于或等于0且小于1的随机数;第二种形式返回一个大于或等于LOW,小于HIGH的随机数。下面是其用法的一个示例:
SQL> select dbms_random.value, dbms_random.value(55,100) from dual;
VALUE DBMS_RANDOM.VALUE(55,100)
--------------- -----------------------------
.782821936 79.6367038
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。事实上,这就是你在清单1中所看到的。
最后,是STRING函数。它返回一个长度达60个字符的随机字符串。参数OPT可以是清单2显示的值中的任何一个单个字符。
关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:
select text from all_source
where name = 'DBMS_RANDOM'
and type = 'PACKAGE' order by line;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-05
Oracle的随机数产生函数(DBMS_RANDOM )
2007-10-17 17:12
Oracle8 8.0版介绍了DBMS_RANDOM包,Oracle8i 8.1.6版介绍了DBMS_RANDOM包的新功能,但Oracle8i 文档中没有详细全面介绍其功能。幸运的是:有一个新的DBMS_RANDOM包函数能够返回0-1之间的随机数。这个新函数是:
◆ FUNCTION value RETURN NUMBER;
◆ FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
◆ FUNCTION normal RETURN NUMBER;
◆ FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;

VALUE函数的第一种形式返回一个大于或等于0且小于1的随机数;第二种形式返回一个大于或等于LOW,小于HIGH的随机数。下面是其用法的一个示例:
SQL> select dbms_random.value, dbms_random.value(55,100) from dual;
VALUE DBMS_RANDOM.VALUE(55,100)
--------------- -----------------------------
.782821936 79.6367038
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。事实上,这就是你在清单1中所看到的。
最后,是STRING函数。它返回一个长度达60个字符的随机字符串。参数OPT可以是清单2显示的值中的任何一个单个字符。
关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:
select text from all_source
where name = 'DBMS_RANDOM'
and type = 'PACKAGE' order by line;

参考资料:http://hi.baidu.com/chensong_blog/blog/item/4fbb4f4f13649235aec3ab1c.html

第2个回答  2010-01-03
给你一个思路:
如果一个表中有省份字段和城市字段就比较好办:
首先用RS.RecordCount读取数据表的记录数,然后用随机函数生成一个随机数,这个随机数必须小于或等于数据表的总记录数,假如随机数的变量是:X,那么:
RS.Open "Select * From 数据表名 where ID=" & X & "", conn, 2 , 2
注意:数据表中ID字段(自动编号)必须是连续的!!本回答被提问者采纳
第3个回答  2010-01-03
select top 1 province.pname, city.cname from city inner join province on city.provinceId=province.provinceId order by city.newId()
首先将两个表连接起来 然后将城市表随机排序,再取第一个

select top 1 pname, cname from (select pname, cname from province inner join city on city.provinceId=province.provinceId) ta order by newid()
先读出全集 然后再随机一个
相似回答