Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menghasilkan nomor acak untuk setiap baris dalam pemilihan T-SQL?

Lihatlah SQL Server - Setel angka acak berbasis yang memiliki penjelasan yang sangat rinci.

Untuk meringkas, kode berikut menghasilkan angka acak antara 0 dan 13 inklusif dengan distribusi seragam:

ABS(CHECKSUM(NewId())) % 14
 

Untuk mengubah rentang Anda, cukup ubah angka di akhir ekspresi. Berhati-hatilah jika Anda membutuhkan rentang yang mencakup angka positif dan negatif. Jika Anda salah melakukannya, Anda dapat menghitung dua kali angka 0.

Peringatan kecil untuk orang gila matematika di ruangan:ada sedikit bias dalam kode ini. CHECKSUM() menghasilkan angka yang seragam di seluruh rentang tipe data sql Int, atau setidaknya sedekat yang dapat ditunjukkan oleh pengujian saya (editor). Namun, akan ada beberapa bias ketika CHECKSUM() menghasilkan angka di ujung paling atas dari rentang itu. Setiap kali Anda mendapatkan angka antara bilangan bulat maksimum yang mungkin dan kelipatan tepat terakhir dari ukuran rentang yang Anda inginkan (14 dalam kasus ini) sebelum bilangan bulat maksimum itu, hasil tersebut lebih disukai daripada bagian sisa rentang Anda yang tidak dapat dihasilkan dari kelipatan terakhir dari 14.

Sebagai contoh, bayangkan seluruh rentang tipe Int hanya 19. 19 adalah bilangan bulat terbesar yang dapat Anda pegang. Ketika CHECKSUM() menghasilkan 14-19, ini sesuai dengan hasil 0-5. Angka-angka itu akan berat disukai lebih dari 6-13, karena CHECKSUM() dua kali lebih mungkin untuk menghasilkannya. Lebih mudah untuk menunjukkan ini secara visual. Di bawah ini adalah seluruh rangkaian hasil yang mungkin untuk rentang bilangan bulat imajiner kami:

Checksum Integer:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19Range Hasil:0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 2 3 4 5 

Anda dapat melihat di sini bahwa ada lebih banyak peluang untuk menghasilkan beberapa angka daripada yang lain:bias. Untungnya, kisaran sebenarnya dari tipe Int adalah banyak lebih besar... sedemikian rupa sehingga dalam banyak kasus bias hampir tidak terdeteksi. Namun, ini adalah sesuatu yang harus diperhatikan jika Anda pernah melakukan ini untuk kode keamanan yang serius.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Fungsi untuk Memformat Angka menjadi 2 Tempat Desimal di SQL Server

  2. Cara menghasilkan rentang tanggal di SQL Server

  3. Metode yang benar untuk menghapus lebih dari 2100 baris (berdasarkan ID) dengan Dapper

  4. Pilih nilai dari bidang XML di SQL Server 2008

  5. Cara Mengubah Warna dan Font di SQL Server Management Studio ( SSMS) - Tutorial SQL Server / TSQL Bagian 12