SQL 生成隨機數

2021-06-06 17:13:14 字數 2584 閱讀 8765

select * from northwind..orders order by newid()

--隨機排序

select top 10 * from northwind..orders order by newid()

--從orders 表中隨機取出10 條記錄

示例a.對變數使用newid 函式

以下示例使用newid() 對宣告為uniqueidentifier 資料型別的變數賦值。在測

試uniqueidentifier 資料型別變數的值之前,先輸出該值。

-- creating a local variable with declareset syntax.

declare @myid uniqueidentifier

set @myid = newid()

print 'value of @myid is '+ convert(varchar(255), @myid)

下面是結果集:

value of @myid is 6f9619ff-8b86-d011-b42d-00c04fc964ff

注意:newid 對每台計算機前往的值各不相同。所顯示的數字僅起解釋說明的作用。

隨機函式:rand()

在查詢分析器中執行:select rand(),可以看到結果會是類似於這樣的隨機小數:

0.36361513486289558,像這樣的小數在實際應用中用得不多,一般要取隨機數都會取隨機

整數。那就看下面的兩種隨機取整數的方法:

1、a:select floor(rand()*n) ---生成的數是這樣的:12.0

b:select cast( floor(rand()*n) as int) ---生成的數是這樣的:12

2、a:select ceiling(rand() * n) ---生成的數是這樣的:12.0

b:select cast(ceiling(rand() * n) as int) ---生成的數是這樣的:12

其中裡面的n 是乙個你指定的整數,如100,可以看出,兩種方法的a 方法是帶有.0

這個的小數的,而b 方法就是真正的整數了。

大致一看,這兩種方法沒什麼區別,真的沒區別?其實是有一點的,那就是他們的生成隨機

數的範圍:

方法1 的數字範圍:0 至n-1 之間,如cast( floor(rand()*100) as int)就會生成0

至99 之間任一整數

方法2 的數字範圍:1 至n 之間,如cast(ceiling(rand() * 100) as int)就會生成1

至100 之間任一整數

對於這個區別,看sql 的聯機幫助就知了:

比較ceiling 和floor

ceiling 函式前往大於或等於所給數字表示式的最小整數。floor 函式前往小於或

等於所給數字表示式的最大整數。例如,對於數字表示式12.9273,ceiling 將前往13,

floor 將前往12。floor 和ceiling 前往值的資料型別都與輸入的數字表示式的數

據型別相同。

現在,各位就可以根據自己需要使用這兩種方法來取得隨機數了^_^

另外,還要提示一下各位菜鳥,關於隨機取得表中任意n 條記錄的方法,很簡單,就

用newid():

select top n * from table_name order by newid() ----n 是乙個你指定的整

數,表是取得記錄的條數.

舉例:經過測試發現:

if object_id('tb') is not null

drop table tb

create table tb (s_id int,t_id int, fenshu int)

insert into tb

select 1,1,66 union all

select 1,2,67 union all

select 2,1,65 union all

select 2,2,78 union all

select 3,1,66 union all

select 3,2,55

--這個方法可以給不同數加上不同隨機數(newid( ))

select fenshu,(fenshu+cast(ceiling(rand(checksum(newid()))*10)as int))as fenshu

from tb

--這個方法只能給不同數隨機加上相同數(rand( ))

select fenshu,(fenshu+cast(ceiling(rand() * 10) as int))as fenshu

from tb

或者select fenshu,fenshu+cast(ceiling(rand(checksum(rand()))*10) as int) fenshu2

from tb

/*------------

66 68

67 74

65 75

78 80

66 73

55 58

66 68

67 69

65 67

78 80

66 68

55 57

程式生成隨機數與SQL語句生成隨機數

隨機數可以通過程式生成,也可以通過sql語句生成。通過程式生成隨機數時一般採用硬體的編號 時間作為種子,這種方法在瞬間插入資料庫n條資料的時候會影響隨機數的效果,生成很多相鄰的插入值相同。所以頻繁插入時可以使用sql語句的內建函式生成隨機數,可以避免此類事情發生。demo c int min 0,m...

隨機生成隨機數

現畫乙個command命令按鈕,進行貼上。private sub command1 click show me scale 0,0 18,8 me.auto redraw true me.draw mode 2 circle 3,4 3,vb red me.auto redraw false lin...

隨機數生成

原型 void srand unsigned seed 用法 srand和rand 配合使用產生偽隨機數序列。rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。sr...