Funciones por rango para Fechas numeros y cadenas
Funciones para generar datos de prueba RAND()
Hola amigos, les dejo una nuevas funciones para generar numeros valores aleatorios mediante funciones SQL, ideal para cuando requerimos generar valores de pruebas, por lo cual podremos crear segmentos de datos regales para pruebas
importaqnte mecionarles que se requiere crear una vista “VIEW” para poder utilizar la función RAND(), ya que la mismoa no es valida, para su uso dentro de una función escalar, si lo intentamos hacer nos marcara el siguiente error.
- Funcion Para generar cadenas de caracteres aleatorios
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 |
CREATE VIEW vwRandom AS SELECT RAND() as Rnd GO CREATE FUNCTION dbo.RandonString ( @size AS INT, --Tamaño de la cadena aleatoria @op AS VARCHAR(2) --Opción C,N,CN ) RETURNS VARCHAR(62) AS BEGIN DECLARE @chars AS VARCHAR(52), @numbers AS VARCHAR(10), @strChars AS VARCHAR(62), @strPass AS VARCHAR(62), @index AS INT, @cont AS INT SET @strPass = '' SET @strChars = '' SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' SET @numbers = '0123456789' SET @strChars = CASE @op WHEN 'C' THEN @chars --Letras WHEN 'N' THEN @numbers --Números WHEN 'CN' THEN @chars + @numbers --Ambos (Letras y Números) ELSE '------' END SET @cont = 0 WHILE @cont < @size BEGIN SET @index = ceiling( ( SELECT rnd FROM dbo.vwRandom ) * (len(@strChars)))--Uso de la vista para el Rand() y no generar error. SET @strPass = @strPass + substring(@strChars, @index, 1) SET @cont = @cont + 1 END RETURN @strPass END GO |
- Funcion Para generar fechas aleatorias entre dos rangos, en tipo entero y date
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 |
CREATE FUNCTION [dbo].[RandonFecha] ( @lower DATE, @upper DATE ) RETURNS DATE AS BEGIN DECLARE @random DATE SELECT @random = DATEADD(day, DATEDIFF(DAY, @lower, @upper) * seed, @lower) FROM dbo.seeder RETURN @random END CREATE FUNCTION [dbo].[RandonFechaInt] ( @lower DATE, @upper DATE ) RETURNS VARCHAR(12) AS BEGIN DECLARE @random DATE DECLARE @Return VARCHAR(50) SELECT @random = DATEADD(day, DATEDIFF(DAY, @lower, @upper) * seed, @lower) FROM dbo.seeder SET @Return= replace(convert(varchar, @random, 111), '/', '') RETURN @Return END |
- Funcion Para generar numeros aleatorios entre dos rangos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
CREATE VIEW dbo.seeder AS SELECT RAND(CONVERT(VARBINARY, NEWID())) seed GO CREATE VIEW vwRandom AS SELECT RAND() as Rnd GO CREATE FUNCTION [dbo].[RandonNumerico] ( @lower DECIMAL(18,4), @upper DECIMAL(18,4) ) RETURNS DECIMAL(18,4) AS BEGIN DECLARE @random DECIMAL(18,2) SELECT @random = ((@upper - @lower) * seed + @lower) FROM dbo.seeder RETURN @random END |