標籤:
在開發中很多時候,我們都會遇到這種需要產生一個指定範圍隨機數的情況。而且在很多語言中比如Java、C#、SQl等,都會有一個函數產生一個類似於0.234273983423789的隨機小數,而所有的隨機數都是通過這個最基本的隨機數(0.234273983423789)變化過來的。
下面我說一下產生指定範圍隨機數的思路,比如我要產生一個100-999範圍內的隨機數,我就要保證我寫的產生隨機數的運算式所產生的值,最大是999,最小是100。還有就是要明白一個數學裡的小道理,0.99去乘一個數字所得的結果約等於這個數但不等於這個數。什麼意思呢?就是0.999*9000的結果肯定是等於8999.9999...的,一會兒用用到這個思想。
這裡我再介紹兩個函數,一會兒會用到。
floor():會返回一個小於等於當前數的最小整數 floor(2.5)=2
ceiling():和上個函數相反,會返回一個大於等於當前數的最大整數 ceiling(2.5)=3
最後看代碼(隨機產生一個100-999的隨機數)
產生一個100-999的隨機數,包括100和999
SELECT FLOOR(RAND()*900)+100
下面我們分析一下這段代碼,首先從最裡面開始,rand()會產生一個0.000000..到0.999999..的隨機數,然後這個隨機數乘以900以後 就會產生一個0到899...的隨機數,最後在給它加上100,就會產生一個100到(899+100)的隨機數也就是100到999的隨機數
以下代碼能輸出所有的隨機數,直到出現100或者999停止迴圈
1 declare @rand int 2 WHILE 1=1 3 BEGIN 4 SET @rand=FLOOR(RAND()*900)+100 5 PRINT @rand 6 IF @rand=100 or @rand=999 7 begin 8 break 9 end10 end
如果有更好的方法大家可以評論私信!一起交流!
這裡還有一種比較好的方法,但是不太好理解,大家可以記下來。
1 DECLARE @Result INT 2 DECLARE @Upper INT 3 DECLARE @Lower INT 4 5 SET @Lower = 1 --包括左邊的數 6 7 SET @Upper = 11 --不包括右邊的數 8 9 --[left,right)10 11 SELECT @Result = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)12 SELECT @Result
作者連絡方式:[email protected]
如有轉寄 請務必標明原文地址 謝謝!
SQL Server產生指定範圍內的隨機數