當前位置:首頁 » 編程語言 » SQL取一個區間的隨機數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

SQL取一個區間的隨機數

發布時間: 2023-03-13 10:29:25

sql如何獲取33-128之間的隨機整數

大家應該都知道sql server中Rand()函數用法了,好吧,如果你不知道,我們可以解釋一下:
Rand()函數:返回一個介於0和1之間的隨機float值。

但這個函數並沒有提供參數讓我們設置返回的隨機數的范圍,比如我只想返回一個大於或等於1但同時又要小於或等於100的整數。現在我們做一個自定義函數,用於返回一個指定最大值與最小值內的隨機整數。該自定義函數還是需要用到Rand系統函數,但因為在函數中是不能夠使用Rand函數的,如果有使用,會報以下的錯誤:
在函數內的 'rand' 中對帶副作用的或依賴於時間的運算符的使用無效

為了解決該問題,我們先創建一個視圖V_Rand,用於讀取一個隨機數,視圖代碼如下:

CREATE VIEW View_Rand
AS
SELECT RAND() AS RandValue

有了該視圖,我們就開始創建我們需要的函數了,sql如下:

CREATE FUNCTION [dbo].[udf_GetRandomInteger]
(
@MinValue int = null,
@MaxValue int = null
)
RETURNS int
AS
/*
函數名稱:udf_GetRandomInteger
功能簡述:取隨機整數
相關對象:無
參數:@MinValue 最小值
@MaxValue 最大值
*/
BEGIN

declare @RandomValue float
declare @ReturnValue int

while(1=1)
begin
--從隨機數視圖中獲取一個隨機值(因為函數中不能直接使用rand(),所以用V_Rand視圖代替)
select @RandomValue = RandValue from V_Rand
--根據最大最小值獲取隨機整數
if @MinValue is not null and @MaxValue is not null
begin
select @ReturnValue = ceiling(@RandomValue * @MaxValue)
if @ReturnValue >= @MinValue and @ReturnValue <= @MaxValue
begin
break
end
end
else if @MinValue is not null and @MaxValue is null
begin
select @ReturnValue = ceiling(@RandomValue * @MinValue)
if @ReturnValue >= @MinValue
begin
break
end
end
else if @MinValue is null and @MaxValue is not null
begin
select @ReturnValue = ceiling(@RandomValue * @MaxValue)
if @ReturnValue <= @MaxValue
begin
break
end
end
else if @MinValue is null and @MaxValue is null
begin
select @ReturnValue = convert(int,substring(convert(varchar(20),@RandomValue),3,20))
break
end
end

return @ReturnValue

END

上面的函數也有用到了ceiling()系統函數,該函數的作用就返回一個總是大於或等於指定的numeric值的整數。比如:ceiling(1.1),會返回2,celing(2),也會返回2,它不會對參數進行四捨五入的運算。

好了,函數創建完畢,我們可以開始測試該函數了,執行以下sql

select dbo.udf_GetRandomInteger(33,128)

② 關於SQL如何取隨機數問題

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 al;
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;

③ 使用SQL語句取隨機數的方法

SQL隨機查詢語句,[資料庫使用技巧]SQL語句生成隨機數,如何隨機顯示sql查詢語句查詢的數據記錄集中的20條,隨機取出若干條記錄的SQL語句,使用SQL語句取隨機數的方法
方法如下:
SQL
Server:
Select
TOP
N
*
From
TABLE
order
By
NewID()
Access:
dim
r
randomize
r
=
rnd
sql
=
"select
top
10
*
from
table
order
by
rnd("
&
r
&
"-id)"
rnd("
&
r
&
"-id)
其中的id是自動編號欄位,可以利用其他任何數值來完成,比如用姓名欄位(UserName)
select
top
10
*
from
table
order
by
rnd("
&
r
&
"-Len(UserName))
MySql:
Select
*
From
TABLE
order
By
Rand()
Limit
10
orACLE:
select
*from
(select
*from
t
order
by
dbms_random.value)
where
rownum<10

④ SQL 觸發器與一定范圍內的隨機數產生

寫了一個例子給你,隨機數函數 在 2 8 14 29 42 五個數中隨機選選中一個

sqlserver環境 有問題再追問,望採納。

createviewv_random
as
selectcast(floor(RAND()*100)asint)%5asrandom
go
createfunctionRandom()
returnsint
as
begin
declare@numint,@reltint
select@num=randomfromv_random;
if@num=0
set@relt=2;
elseif@num=1
set@relt=8;
elseif@num=2
set@relt=14;
elseif@num=3
set@relt=29;
else
set@relt=42;
return@relt
end
--調用
selectdbo.Random()

⑤ 如何用SQL語句實現某個欄位數為隨機數

以某整數欄位為種子(沒有的話要生成一個),通過RAND函數生成一個0-1之間的隨機數。如0.7136106261841817,然後轉換成文本型,再取後7位即RIGHT(CONVERT(VARCHAR,RAND(序號)),7) 。

⑥ 在SQL Server數學函數中,獲取0~1之間的隨機值的函數是什麼

MSSQLSERVER如要獲取0~1之間的隨機數可以使用下列表達式:

Floor(2* Rand())

例如每次運行下列SQL語句,將隨機返回0或1

selectFloor(2*Rand());

請注意MSSQL的SQL語言,每次運行select,不論檢索出多少行,隨機函數rand都將返回相同的隨機數。

另外,需要返回某個指定范圍的隨機整數請參考下列公式:

Floor((upperbound - lowerbound + 1) * Rand() + lowerbound)

參數說明:

upperbound 為正整數上限

lowerbound 為正整數下限

Rand()為系統隨機函數

Floor()為系統函數,返回小於或等於所給數字表達式的最大整數。

有不同需要時,照套上述公式就可以了。

⑦ sql server 怎麼生成隨機數

rand() 定義: 返回從0到1之間的隨機浮點值。
舉例說明:
select rand() as 隨機數   結果如圖:

select cast( floor(rand()*N) as int )  --方法1
結果:20
select cast( ceiling(rand()*N) as int ) --方法2
結果:43
大致一看,這兩種方法沒什麼區別,區別就是他們的生成隨機數的范圍:
方法1的數字范圍:0至N-1之間,如cast( floor(rand()*100) as int)就會生成0至99之間任一整數
方法2的數字范圍:1至N之間,如cast(ceiling(rand() * 100) as int)就會生成1至100之間任一整數
比較 CEILING 和 FLOOR
CEILING 函數返回大於或等於所給數字表達式的最小整數。FLOOR 函數返回小於或等於所給數字表達式的最大整數。
例如,對於數字表達式 12.9273,CEILING 將返回 13,FLOOR 將返回 12。

⑧ sql 隨機數

select cast(rand() * 30 as int),cast(rand() * 30 as int),cast(rand() * 30 as int),cast(rand() * 30 as int),
cast(rand() * 30 as int),cast(rand() * 30 as int),cast(rand() * 30 as int)

考慮到你可能需要不重復的,用如下方法比較好
declare @tb table(val int)
declare @i int
set @i = 1
while @i <= 30
begin
insert into @tb(val) values(@i)
set @i = @i + 1
end
select top 7 * from @tb order by newid()

⑨ sql 獲取1到10之間的隨機整數

1到10之間的隨機整數:
Select Round(Rand()*9+1,0)
n到m之間的隨機整數(n<m):
Select Round(Rand()*(m-n)+n,0)