Cómo generar números al azar en SQL server: Generar un numero aleatorio en un rango SQL SERVER
Como crear números aleatorio en un rango determinado
Para empezar un amigo comento que requería generar un numero aleatorio en un rango mediante SQL Server dentro de un procedimiento almacenado, el cual primeramente seria utilizando en un sistema de loteria además en caso de que el usuario ya tenga un numero asignado entonces debera retornar el mismo, por lo cual posteriormente guardaremos la informacion en una tabla de los numeros ya creados
Es importante mencionar que el Azar es una casualidad algo nuevo, sin embargo nuestro proceso utilizar azar pero tomar en cuenta que en cada solicitud quedaran menos numeros porque utiliza un rango el cual se agotara, por ende en cada solicitud la probabilidad cambia
Nuestro proceso utiliza la funcion de RAND() de SQL Server la explicacion de la misma la podremos encontrar el el sitio oficial de microsoft https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql por lo general la misma crea numeros al azar, sin embargo en nuestro proyecto queremos que el mismo quede dentro de dos extremos
probabilidad en wikipedia
«La probabilidad es una medida de la certidumbre asociada a un suceso o evento futuro y suele expresarse como un número entre 0 y 1 (o entre 0 % y 100 %).
Una forma tradicional de estimar algunas probabilidades sería obtener la frecuencia de un acontecimiento determinado mediante la realización de experimentos aleatorios, de los que se conocen todos los resultados posibles, bajo condiciones suficientemente estables. Un suceso puede ser improbable (con probabilidad cercana a cero), probable (probabilidad intermedia) o seguro (con probabilidad uno).
La teoría de la probabilidad se usa extensamente en áreas como la estadística, la física, la matemática, las ciencias, la administración, contaduría, economía y la filosofía para sacar conclusiones sobre la probabilidad discreta de sucesos potenciales y la mecánica subyacente discreta de sistemas complejos, por lo tanto es la rama de las matemáticas que estudia, mide o determina los experimentos o fenómenos aleatorios.»
Generar un numero aleatorio en un rango
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
CREATE TABLE [dbo].[TNumeroSuerte]( [ID] [int] IDENTITY(1,1) NOT NULL, [IMEI] [varchar](20) NULL, [Value] [int] NULL, [Fecha] [datetime] NULL, [Sequense] [int] NULL, CONSTRAINT [PK_TNumeroSuerte] PRIMARY KEY CLUSTERED ( [ID] ASC ) CREATE PROCEDURE [dbo].[NumSuerte] (@IMEI VARCHAR(20)) AS DECLARE @Upper INT DECLARE @Lower INT DECLARE @rc INT = 0 DECLARE @Value INT DECLARE @Sequense INT=0 SET @Lower = 0 ---- Minimo SET @Upper = 999 ---- Maximo SET @Value=ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) SET @IMEI=@IMEI +CAST(@Value AS VARCHAR(20))-- COMENTAR ESTA LISTA ESTANDO EN PRODUCTIVO SET @Sequense=(SELECT COUNT(*)/999 FROM TNumeroSuerte ) IF NOT EXISTS (SELECT IMEI FROM TNumeroSuerte WHERE IMEI = @IMEI AND CAST(FECHA AS DATE) = CAST(GETDATE() AS DATE)) BEGIN WHILE @rc = 0 BEGIN IF NOT EXISTS (SELECT Value FROM TNumeroSuerte WHERE Value = @Value AND CAST(FECHA AS DATE) = CAST(GETDATE() AS DATE) AND Sequense=@Sequense ) BEGIN INSERT INTO TNumeroSuerte ( IMEI, Value, Fecha ,Sequense ) VALUES ( @IMEI, @Value, GetDate(),@Sequense ) SET @rc = 1; END ELSE BEGIN SELECT @Value = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) , @rc = 0; END END END SELECT * FROM TNumeroSuerte WHERE IMEI=@IMEI AND CAST(FECHA AS DATE) = CAST(GETDATE() AS DATE) GO |
EL Codigo T-SQL antes expuesto muestra como crear un procedimiento almacenado genera un numero aleatorio para un numero de IMEI de un celular, asi cuando el usuario consulta nuevamente le retornara el numero asignado previamente, en caso de que los numero del rango se agoten, entonces dicho proceso crea un nuevo numero de secuencia y genera un nuevo rango con la secuencia nueva
Conclusiones, Luego de lo anteriormente expuesto podemos demostrar como un procedimiento almacenado de SQl server además de crear numero los guarda por dias , para su posterior analisis