Image

Funciones Útiles - Random Alfanumérico en SQL

SQLServer

Hola ABC-eLearners, a modo de ayuda para todos los lectores con ganas de aprender SQL, voy a compartirles mis experiencias, las que considere más útiles para todos. Hoy les comparto una función que te permitirá generar códigos alfanuméricos, numéricos y de sólo letras del tamaño que quieres. Esta función es muy útil para generar códigos muy seguros de descuentos y ofertas para dar a los clientes.

CREATE FUNCTION [dbo].[f_Random_Caracters]
(
  @size AS INT, --Tamaño de la cadena aleatoria
  @op AS VARCHAR(2) --Opción para letras(ABC..), números(123...) o ambos.
)
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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  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

    --Uso de la vista para el Rand() y no generar error.
    SET @index = ceiling( ( SELECT rnd FROM vwRandom ) * (len(@strChars)))
    SET @strPass = @strPass + substring(@strChars, @index, 1)
    SET @cont = @cont + 1

  END

  RETURN @strPass
  
END


Vista

CREATE VIEW vwRandom
AS
SELECT RAND() as Rnd


Ejemplo (alfanúmerico)

SELECT [dbo].[f_Random_Caracters] (15, 'CN')
--Resultado: kCH8icXZooYrAsV


Ejemplo (Númerico)

SELECT [dbo].[f_Random_Caracters] (10, 'N')
--Resultado: 3939630638


Ejemplo (Letras)

SELECT [dbo].[f_Random_Caracters] (12,'C')
--Resultado: flZhPzZjgoOL


Comenta qué otras funciones más necesitarías para reusar y optimizar tu tiempo mientras programas en Base de datos.

0 Commentario(s)

Deja un comentario