MariaDB menyertakan RAND()
fungsi yang mengembalikan angka acak. Lebih tepatnya, ia mengembalikan DOUBLE
nilai floating point presisi v
dalam rentang 0 <= v < 1.0
.
Ini bagus, tetapi bagaimana jika Anda ingin menghasilkan bilangan bulat dalam rentang yang lebih besar – dan rentang yang Anda tentukan?
Untungnya, ada teknik mudah untuk melakukan ini.
Teknik
Kunci untuk mengembalikan bilangan bulat acak dalam rentang tertentu ada dalam sintaks berikut:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Ini menggunakan FLOOR()
fungsi untuk mengembalikan nilai integer terbesar tidak lebih besar dari argumennya. Melihat sebagai RAND()
our kami fungsi adalah bagian dari argumen, yang perlu kita lakukan hanyalah menerapkan beberapa perhitungan lagi untuk menentukan nilai acak minimum dan maksimum yang diperlukan.
Hasilkan Integer Acak Antara 1 dan 10
Jadi, dengan menggunakan sintaks di atas, berikut adalah contoh menghasilkan bilangan bulat acak antara 1 dan 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Hasil:
+----------------------------------+| LANTAI(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+---------------------------------+
Mari kita sebut lagi untuk melihat efek acak:
SELECT
FLOOR(1 + RAND() * (10 - 1 +1)) AS r1,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r2,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r3,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r4,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r5,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r6,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r7,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r8;
Hasil:
+----+----+----+----+----+----+----+-----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+----+----+----+
Hasilkan Integer Acak Antara 1 dan 100
Untuk menghasilkan angka acak antara 1 dan 100, yang perlu kita lakukan hanyalah mengganti 10 dengan 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Hasil:
+----------------------------------+| LANTAI(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+-----------------------------------+
Mari kita sebut lagi untuk melihat efek acak:
SELECT
FLOOR(1 + RAND() * (100 - 1 +1)) AS r1,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r2,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r3,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r4,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r5,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r6,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r7,
FLOOR(1 + RAND() * (100 - 1 +1)) AS r8;
Hasil:
+----+----+----+----+----+----+----+-----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+----+----+----+
Hasilkan Integer Acak Antara 10.000 dan 50000
Mari kita lakukan satu lagi, kali ini menghasilkan angka acak antara 10.000 dan 50000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Hasil:
+--------------------------------------------+| LANTAI(10000 + RAND() * (50000 - 10000 +1)) |+-------------------------------- ------------+| 46884 |+----------------------------------------+Dan beberapa panggilan lagi untuk melihat efek acak:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r1, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r2, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r3, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r4, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r5, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r6, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r7, FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r8;
Hasil:
+-------+-------+-------+-------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------- +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+------- +-------+-------+