Oracle SQLServer 的隨機數問題 .)

來源:互聯網
上載者:User

 

在資料庫操作中經常會碰到使用隨機數的問題,幾天前翔哥來問我關於 SQLServer 批量產生隨機數的問題,記得之前他也問過我 Oracle 下面隨機數的問題,當時找到了一些資料但沒來得及整理,今天正好把 Oracle 和 SQLServer 下的隨機數問題整理一下。

1. 產生隨機數

Oracle
     Oracle 下隨機數可以用 DBMS_RANDOM 包來實現,他調用 Oracle 內部隨機數產生器來產生隨機數,具體使用可以參考文檔,另外 psoug 上有更詳細的參考。
SQLServer
     SQLServer 下可以用 RAND 函數產生隨機數,不過這個函數似乎只能一次產生一個隨機數,如果大批量產生隨機數,都是重複的(在 Oracle 中使用 DBMS_RANDOM 產生的隨機數不太會重複):
SELECT TOP 5 RAND()FROM sysobjects0.729103894753583730.729103894753583730.729103894753583730.729103894753583730.72910389475358373        之後 google 了一下,找到了鄒建的一篇文章,巧妙地通過 CHECKSUM(NEWID()) 產生隨機數,並用 RIGHT 函數獲得其中幾位(我覺得用 Left 更好,這樣可以防止首位為 0,從而避免插入資料時位元變少),這樣不但很好地實現了批量產生隨機數,效率也不錯。
2. 隨機從表中取數

Oracle
      之前就是在 Oracle 下碰到了這個問題才去研究隨機數,發現非常有意思,方法可以概括為兩大類,一類就是根據隨機數來 Order by 從而將資料隨機排列。這類方法又可以分為兩種方法,一種就是用 dbms_random 產生隨機數:
select *  from (select * from t order by dbms_random.value) where rownum < 50;
根據 jametong 所說,由於隨機數發生器本身初始化需要時間,而且產生隨機數的過程中會頻繁讀取資料庫,所以這種方法效率最差。第二種方法是用 dbms_utility.get_hash_value 產生隨機數:
select *  from (select dbms_utility.get_hash_value(to_char(dbms_utility.get_time) ||                                           tb1.col1,2,1048576) rand_num,               a.*          from tb1         order by rand_num) where rand_num <= 50;這種方法效率稍好。第二類方法就是用 sample 對錶做採樣,這是效率最高的方法:
SELECT emp FROM emp SAMPLE(10);SAMPLE(n) 是一個很有用的方法,它隨機從表中抽取 n% 的資料,但並不是一定是 n% 可能小於該值,所以如果總共 1000 行資料,要隨機取 100 行,最好將 n 設得大於 10。另外,這種方法只能用於一個表,from 後不能有多個表。

SQLServer
     SQLServer 下只想到了 Order by  的方法,由於 rand() 產生重複,所以還是可以用 NEWID() 的方法: select top 10 * from tablename order by NEWID() 

....

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.