Apakah mungkin di Microsoft SQL Server menghasilkan nilai int acak dari Min hingga Max (contoh 3-9, 15-99 dll)
Saya tahu, saya dapat menghasilkan dari 0 ke Max, tetapi bagaimana cara meningkatkan batas Min?
Kueri ini menghasilkan nilai acak dari 1 hingga 6. Perlu mengubahnya dari 3 menjadi 6.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Ditambahkan 5 detik kemudian :
Pertanyaan bodoh, maaf ...
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
sql
sql-server
sql-server-2008
FSou1
sumber
sumber
Jawaban:
Ini menghasilkan nomor acak antara 0-9
1 sampai 6
3 sampai 6
Dinamis (Berdasarkan Komentar Eilert Hjelmeseths)
Diperbarui berdasarkan komentar:
NEWID
menghasilkan string acak (untuk setiap baris sebagai gantinya)CHECKSUM
mengambil nilai string dan membuat angka%
) membagi dengan angka itu dan mengembalikan sisanya (artinya nilai maks kurang dari angka yang Anda gunakan)ABS
mengubah hasil negatif menjadi positifsumber
ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
. Beberapa tes di pihak saya membuahkan hasil yang baik. Jika memang akurat, saya rasa jawaban ini bisa sedikit ditingkatkan dengan memasukkannya.Saya melihat Anda telah menambahkan jawaban atas pertanyaan Anda di SQL Server 2008, Anda juga dapat melakukannya
Beberapa kelemahan dari metode ini adalah
NEWID()
metodetetapi hanya berpikir saya akan menambahkannya sebagai opsi lain.
sumber
CRYPT_GEN_RANDOM
ini benar-benar dimaksudkan untuk situasi di mana Anda membutuhkan nomor acak semu yang lebih aman secara kriptografis.Kamu bisa melakukan ini:
Dan itu diambil langsung dari tautan ini , saya tidak benar-benar tahu bagaimana memberikan kredit yang tepat untuk jawaban ini.
sumber
Bagus dan sederhana, dari situs Pinal Dave:
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
(Saya memang membuat sedikit perubahan pada @ Atas- untuk memasukkan angka atas, menambahkan 1.)
sumber
Secara sederhana:
Anda dapat mengubah dan mengedit kode ini untuk kebutuhan Anda.
sumber
Ini adalah satu baris kode
Untuk ini gunakan fungsi SQL Inbuild RAND () .
Berikut rumus untuk menghasilkan bilangan random antara dua bilangan (RETURN INT Range)
Di sini a adalah Angka Pertama Anda (Min) dan b adalah Angka Kedua (Maks) dalam Rentang
Catatan: Anda dapat menggunakan fungsi CAST atau CONVERT juga untuk mendapatkan nomor rentang INT.
(CAST (RAND () * (25-10) +10 SEBAGAI INT))
Contoh:
Berikut rumus untuk menghasilkan bilangan random antara dua bilangan (RETURN DECIMAL Range)
Contoh:
Detail lebih lanjut periksa ini: https://www.techonthenet.com/sql_server/functions/rand.php
sumber
sumber
SELECT ROUND((6 - 3 * 0.16), 0) SELECT ROUND((6 - 3 * 0.17), 0) SELECT ROUND((6 - 3 * 0.5), 0) SELECT ROUND((6 - 3 * 0.51), 0) SELECT ROUND((6 - 3 * 0.83), 0) SELECT ROUND((6 - 3 * 0.84), 0)
Menunjukkan bahwa 16% perubahan untuk 6, ~ 34% itu adalah 5, ~ 34% itu adalah 4 dan ~ 16% itu adalah 3.Fungsi jawaban Lamak :
sumber
Selangkah demi selangkah
Perhatikan bahwa fungsi yang ditentukan pengguna tidak mengizinkan penggunaan RAND (). Solusi untuk ini (sumber: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/ ) adalah membuat tampilan terlebih dahulu.
dan kemudian buat fungsi acak
sumber
Secara umum:
Untuk pertanyaan Anda:
<=>
sumber