sql >> Base de Datos >  >> RDS >> Sqlserver

Generar valor int aleatorio de 3 a 6

Un editor útil agregó 'Seleccionar' antes de cada declaración, pero el objetivo de este elemento es que puede generar claves únicas para cada fila en una devolución, no solo para un elemento (para eso, usaría la función Rand()). Por ejemplo :Seleccione los 100 primeros Rand(),* de tblExample

Devolvería el mismo valor aleatorio para las 100 filas.

Mientras:Seleccione los 100 mejores ABS(CHECKSUM(NEWID()) % 10),* de tbleexample

Devolvería un valor aleatorio diferente entre 0 y 9 en cada fila de la devolución. Entonces, si bien seleccionar hace que sea más fácil copiar y pegar, puede copiar la lógica en una declaración de selección si eso es lo que se requiere.

Esto genera un número aleatorio entre 0-9

SELECT ABS(CHECKSUM(NEWID()) % 10)

1 a 6

SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3 a 6

SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

Dinámico (basado en el comentario de Eilert Hjelmeseth, actualizado para corregir el error (+ a -))

SELECT ABS(CHECKSUM(NEWID()) % (@max - @min - 1)) + @min

Actualizado en base a los comentarios:

  • NEWID genera una cadena aleatoria (para cada fila a cambio)
  • CHECKSUM toma el valor de la cadena y crea el número
  • módulo (% ) se divide por ese número y devuelve el resto (lo que significa que el valor máximo es uno menos que el número que usa)
  • ABS cambia los resultados negativos a positivos
  • luego agregue uno al resultado para eliminar 0 resultados (para simular una tirada de dados)