Say we wanted to generate a random integer between -5 and 0, inclusive. Our first thought might be to try something like this:
Code: Select all
dbadmin=> SELECT randomint(-5);
ERROR 4163: Non-positive value supplied to randomint: -5
Turns out there is a simple formula that can be evaluated to produce a random integer that occurs within a range defined by any upper and lower bounds when the upper bounds >= lower bounds, including negatives. The formula is:
- RANDOMINT(upper bound value - (lower bound value) + 1)) + (lower bound value)
To generate random integers between -5 and 0, inclusive, we could use this query:
Code: Select all
dbadmin=> SELECT RANDOMINT(0 - (-5) + 1) + (-5) random1,
dbadmin-> RANDOMINT(0 - (-5) + 1) + (-5) random2,
dbadmin-> RANDOMINT(0 - (-5) + 1) + (-5) random3,
dbadmin-> RANDOMINT(0 - (-5) + 1) + (-5) random4;
random1 | random2 | random3 | random4
---------+---------+---------+---------
-2 | 0 | -3 | -5
(1 row)
Code: Select all
dbadmin=> SELECT RANDOMINT(5 - (-5) + 1) + (-5) random_1,
dbadmin-> RANDOMINT(5 - (-5) + 1) + (-5) random_2,
dbadmin-> RANDOMINT(5 - (-5) + 1) + (-5) random_3,
dbadmin-> RANDOMINT(5 - (-5) + 1) + (-5) random_4;
random_1 | random_2 | random_3 | random_4
----------+----------+----------+----------
-5 | -1 | 2 | 5
(1 row)
Code: Select all
dbadmin=> SELECT RANDOMINT(0 - (-10) + 1) + (-10) random_1,
dbadmin-> RANDOMINT(0 - (-10) + 1) + (-10) random_2,
dbadmin-> RANDOMINT(0 - (-10) + 1) + (-10) random_3,
dbadmin-> RANDOMINT(0 - (-10) + 1) + (-10) random_4;
random_1 | random_2 | random_3 | random_4
----------+----------+----------+----------
-9 | 0 | -10 | -6
(1 row)
Code: Select all
dbadmin=> SELECT RANDOMINT(-5 - (-10) + 1) + (-10) random_1,
dbadmin-> RANDOMINT(-5 - (-10) + 1) + (-10) random_2,
dbadmin-> RANDOMINT(-5 - (-10) + 1) + (-10) random_3,
dbadmin-> RANDOMINT(-5 - (-10) + 1) + (-10) random_4;
random_1 | random_2 | random_3 | random_4
----------+----------+----------+----------
-8 | -5 | -6 | -10
(1 row)
Code: Select all
dbadmin=> SELECT RANDOMINT(30 - (20) + 1) + (20) random_1,
dbadmin-> RANDOMINT(30 - (20) + 1) + (20) random_2,
dbadmin-> RANDOMINT(30 - (20) + 1) + (20) random_3,
dbadmin-> RANDOMINT(30 - (20) + 1) + (20) random_4;
random_1 | random_2 | random_3 | random_4
----------+----------+----------+----------
25 | 28 | 30 | 22
(1 row)
Have fun!