oracle 与sql serve 获取随机行数的数据
Oracle 隨機獲取N條數據
??? 當我們獲取數據時,可能會有這樣的需求,即每次從表中獲取數據時,是隨機獲取一定的記錄,而不是每次都獲取一樣的數據,這時我們可以采取Oracle內部一些函數,來達到這樣的目的
1) select * from (select * from tablename order by sys_guid()) where rownum < N;?
2) select * from (select * from tablename order by dbms_random.value) where rownum< N;?
3) select *? from (select * from table_name sample(10)?? order by trunc(dbms_random.value(0, 1000)))? where rownum < N;
說明:?
sample(10)含義為檢索表中的10%數據,sample值應該在[0.000001,99.999999]之間,其中 sys_guid() 和 dbms_random.value都是內部函數,通過這樣的方法,就可以實現我們的需求了.
注:
在使1)方法時,即使用sys_guid() 這種方法時,有時會獲取到相同的記錄,即和前一次查詢的結果集是一樣的,我查找了相關資料,有些說是和操作系統有關,在windows平臺下正常,獲取到的數據是隨機的,而在linux等平臺下始終是相同不變的數據集,有些說是因為sys_guid()函數本身的問題,即sys_guid()會在查詢上生成一個16字節的全局唯一標識符,這個標識符在絕大部分平臺上由一個宿主標識符和進程或進程的線程標識符組成,這就是說,它很可能是隨機的,但是并不表示一定是百分之百的這樣.
SQL serve 中獲取隨機行數數據的方式如下:
select top N ?* from ?table_Name order by newid();
但是類似oracle 的使用rand 是沒有結果的。
以上就是一些記錄。
總結
以上是生活随笔為你收集整理的oracle 与sql serve 获取随机行数的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux无线网卡的安装
- 下一篇: unity3d AssetBundle包