Saya ingin tahu apakah ada cara untuk memilih nomor yang dibuat secara acak antara 100 dan 500 bersama dengan kueri pemilihan.
Misalnya: SELECT name, address, random_number FROM users
Saya tidak perlu menyimpan nomor ini dalam db dan hanya menggunakannya untuk menampilkan tujuan.
Saya mencoba sesuatu seperti ini, tetapi tidak berhasil ..
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Semoga seseorang membantu saya. Terima kasih
Jawaban:
Ini harus memberikan apa yang Anda inginkan:
Secara umum,
FLOOR(RAND() * (<max> - <min> + 1)) + <min>
menghasilkan angka antara<min
> dan<max>
inklusif.Memperbarui
Pernyataan lengkap ini seharusnya berfungsi:
sumber
round()
akan memberikan distribusi yang tidak seragam.SET @r=FLOOR(RAND() * 401) + 100
, laluSELECT @r
.RAND()
,UUID()
,NOW()
Adalah fungsi indeterministic. Pemanggilan fungsi tersebut harus dihindari agar tidak ditulis ke dalam log bin untuk replikasi. Sebagai contoh.INSERT INTO t SET ID=UUID();
akan menyebabkan nilaiID
field berbeda pada master dan slaves. Sebaliknya itu perlu ditulis sebagaiSET @uuid:=UUID();
, dan kemudianINSERT INTO t SET ID=@uuid;
, kemudian menjalankannya dalam satu transaksi. Ini akan menjadi replikasi yang aman. Ini sedikit keluar dari topik untuk pertanyaan ini. Itu tidak mengatakan jawaban Anda memiliki masalah. :)As
RAND
menghasilkan angka 0 <= v <1.0 (lihat dokumentasi ) yang perlu Anda gunakanROUND
untuk memastikan bahwa Anda bisa mendapatkan batas atas (500 dalam kasus ini) dan batas bawah (100 dalam kasus ini)Jadi untuk menghasilkan kisaran yang Anda butuhkan:
sumber
Tambahan untuk jawaban ini, buat fungsi seperti
dan menelepon seperti
SELECT myrandom(100,300);
Ini memberi Anda nomor acak antara 100 dan 300
sumber
Anda dapat membuat nomor acak menggunakan
FLOOR(RAND() * n) as randnum
(n adalah bilangan bulat), namun jika Anda tidak memerlukan nomor acak yang sama untuk diulang, maka Anda harus menyimpannya di tabel temp. Jadi Anda dapat memeriksanya denganwhere randnum not in (select * from temptable)
...sumber
keduanya bekerja dengan baik:
sumber
Ini adalah rumus yang benar untuk menemukan bilangan bulat dari
i
kej
manai <= R <= j
sumber
FLOOR(min+RAND()*(max-min+1))