In SQL Server there is a built-in function RAND() to generate random number. RAND() will return a random float value between 0 to 1.
Usage RAND() As It Is
If you use RAND() as it is or by seeding it, you will get random numbers in decimals ranging between 0 and 1.
SELECT RAND(), RAND(5);
SELECT RAND(), RAND(5);
/* Result */
0.5651861527384644 0.713666525097956
0.454560299686459 0.713666525097956
Generate Integer Random Number Between Two numbers
In case if you want random numbers generated between two integers then use this syntax:
Syntax
A + FLOOR(RAND() * (B + 1 - A));
Where:
A = The smallest number of the range.
B = The largest number of the range.
Example
DECLARE @A INT;
DECLARE @B INT;
SET @A = 10
SET @B = 100
SELECT @A + FLOOR(RAND() * (@B + 1 - @A));
GO
/* Result */
73
Generate Random Integer Between 0 And Any Integer
For generating random integer between 0 to any number use this formula:
Syntax
ROUND(RAND() * A, 0);
Where:
A = The largest number of the range.
Example
This script will generate random integer between 0 to 100
SELECT ROUND(RAND() * 100, 0);
GO
/* Result */
26
Generate Random Float Between 0 And Any Number
To generate random float number between 0 and any number use this formula:
Syntax
RAND() * A;
Where:
A = The largest number of the range.
Example
This script will generate random float number between 0 to 100
SELECT RAND() * 100;
/* Result */
27.787772112756
Reference
- About RAND() math function at Microsoft Docs.
The application of the ROUND() function in the examples above appears wrong to me. Example: if I desire random integers between 1 and 6 and the result of RAND() happens to be 0.99, then the result of A + ROUND(RAND() * (B + 1 – A), 0) is 7, which is out of range. I believe the correct function to be applied would be FLOOR().
Correct FLOOR Should be correct
Yes. I’ve changed the example now.
Thank you
Hi,
You are correct. FLOOR will give accurate answer while generating random integer between two integers. I’ve changed the example now. Thank you for pointing out.