SQL隨機函式newID 和RAND 詳解

2021-04-30 07:27:29 字數 1817 閱讀 3338

隨機函式:newid()

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是乙個你指定的整數,表是取得記錄的條數.

SQL隨機函式newID 和RAND 詳解

select from northwind.orders order by newid 隨機排序 select top 10 from northwind.orders order by newid 從orders表中隨機取出10條記錄 示例 a.對變數使用 newid 函式 以下示例使用 newi...

sql 的隨機函式newID 和RAND

sql server的隨機函式newid 和rand select from northwind.orders order by newid 隨機排序 select top 10 from northwind.orders order by newid 從orders表中隨機取出10條記錄 示例 a...

SQL中隨機數函式簡介

在sql server中,有個隨機函式rand 有不少新手可能不知道存在這個函式,現在簡單的介紹下 隨機函式 rand 在查詢分析器中執行 select rand 可以看到結果會是類似於這樣的隨機小數 0.36361513486289558,像這樣的小數在實際應用中用得不多,一般要取隨機數都會取隨機...