PostgreSQL: How to Generate a Random Number in a Range

PostgreSQL provides the random() function that returns a random number between 0 and 1. The following statement returns a random number between 0 and 1.

SELECT random();
      random
-------------------
 0.867320362944156
(1 row)

To generate a random number between 1 and 10, you use the following statement:

SELECT random() * 10 + 1 AS RAND_1_10;
    rand_1_10
------------------
 7.75778411421925
(1 row)

If you want to generate the random number as an integer, you apply the floor() function to the expression as follows:

SELECT floor(random() * 10 + 1)::int;
 floor
-------
     9
(1 row)

Generally, to generate a random number between two integers l and h, you use the following statement:

SELECT floor(random() * (h-l+1) + l)::int;

You can develop a User- Defined function that returns a random number between two numbers l and h:

CREATE OR REPLACE FUNCTION random_between(low INT ,high INT) 
   RETURNS INT AS
$$
BEGIN
   RETURN floor(random()* (high-low + 1) + low);
END;
$$ language 'plpgsql'

The following statement calls the random_between() function and returns a random number between 1 and 100:

SELECT random_between(1,100);
random_between
----------------
             81
(1 row)

If you want to get multiple random numbers between two integers, you use the following statement:

SELECT random_between(1,100)
FROM generate_series(1,5);
random_between
----------------
             37
             82
             19
             92
             43
(5 rows)

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.