Numero aleatorio en SQL SERVER

Esta vez voy a platicar el como obtener un numero aleatorio en Sql Server.

Cuando necesitamos la utilización de un numero aleatorio nos viene a la mente la función que nos proporciona sql server me refiero a: Rand(x numero)
sintaxis ejemplo: select rand(100)
el problema con esto es que si ejecutamos esa línea de código siempre nos dará el mismo numero ya que la función Rand solo evalúa una vez todo el proceso, y esto claro seria un problema ya que lo que nosotros buscamos es un numero aleatorio sin posibilidad de que logremos predecir que numero nos va a proporcionar..
Bueno una vez comentado el problema que esto nos da, encontré una solución que la verdad me funciono de maravilla.. es muy simple y facil de comprender

Sintaxis: ABS(CAST(NEWID() as binary(3)) % 999)
Ejemplo:

update Calificaciones
set Parcial1=ABS(CAST(NEWID() as binary(3)) % 10)

lo que se hace es:
Utilizar la función NEWID que nos genera un numero aleatorio máximo y este lo convertimos a binario, para el ejemplo yo lo estoy delimitando para que solo me genere números aleatorios que van de 0 a 999, esta alternativa del Rand es muy útil para realizar un update a cierto campo en el cual requerimos valores aleatorios para pruebas o como en mi caso lo utilicé para la asignación de rutinas según el valor del numero aleatorio y rangos que se establecieron previamente…

Saludos… Estoy atento a sus comentarios

Comments
11 Responses to “Numero aleatorio en SQL SERVER”
  1. colseco dice:

    Hermano muchas gracias la sintaxis funciona a la perfeccion, pero tengo una inquietud

    ¿si el campo que tengo es alfanumerico como haria para asignarle un valor que ademas de tener numeros aleatorios tambien tenga letras?

    espero me pueda ayudar

    gracias….

  2. jorgetapia dice:

    Un saludo, Me da gusto que alla sido de utilidad este post…

    Respecto a lo que comentas no conosco si existe alguna funcion sin embargo si se puede lograr incluir una letra del abecedario aletoriamente al igual que los numeros

    te voy a poner un ejemplo que espero te sea de utilidad

    declare @i int,@imprime varchar(8)– declaro mis variables a utilizar
    set @i=0
    while @i<10 –en este ejemplo utilizare un while con 10 iteraciones
    begin
    –aqui viene la parte importante
    /*primero con el substring extrigo una letra del abecedario aqui de igual manera
    se utiliza la funcion newid en este caso con un valor maximo de 26 despues solo le concateno el aleatorio haciendo uso de la funcion newID*/
    set @imprime=substring('ABCDEFGHIJKLMNÑOPQRSTUVWXYZ',ABS(CAST(NEWID() as binary(2)) % 26),1)+Cast(ABS(CAST(NEWID() as binary(3)) % 999) as varchar(3))
    –finalmente imprimo el resultado
    print @imprime
    –incremento mi contador
    set @i=@i+1
    end

    Saludos Cordiales..

  3. ivan dice:

    hola como descargo el sql 2005

    • jorgetapia dice:

      Hola acabo de postear algunos pasos para descargar desde rapidshare que es donde se encuentra el sql server 2005
      Espero te sea util.. saludos

  4. Arturo dice:

    Excelentes ejemplos me han sido muy utiles Gracias hermano te pasaste!!!

  5. Gabriel dice:

    Muchas gracias por tu ayuda, ya habia visto la solucion, pero la verdad solo a ti te entendi jajajaja MIL GRACIAS!!!!!!

  6. perezmedel dice:

    Que bien que les haya sido útil el post. Saludos.

  7. Elkin Siabato dice:

    Felicitaciones por tener esa mente y haberse inventado ese codigo.

    Ademas gracias a google que lo ubica entre las primeras paginas, o sino, nunca lo hubiera encontrado tan rapido. thanks.

  8. yesmi dice:

    te amo,,,, me salio muy bien gracias, te debo un hijo…

  9. Mario dice:

    Amigo, muchas gracias por tus ejemplos, fueron super valiosos para tu servidor. No cabe duda que por gente como tú se resuelven problemas de muchos. Gracias

  10. Remis dice:

    Quiero generar un orden aleatorio del 1 al 6 (digamos que solo tengo 6 registros)

    UPDATE Peleas SET PELE_Orden = ABS(CAST(NEWID() as binary(2)) % 6) + 1
    select * from peleas

    Pero me devuelve valores repetidos:

    PELE_Orden
    5
    2
    3
    3
    4
    5

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: