Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

generar valores alatorios

Estas en el tema de generar valores alatorios en el foro de Mysql en Foros del Web. hola amigos como puedo generar un valor aleatoriamente valores que solo sean 'A' y 'D' en mysql gracias de antemano...
  #1 (permalink)  
Antiguo 12/11/2011, 15:10
 
Fecha de Ingreso: noviembre-2009
Mensajes: 5
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta generar valores alatorios

hola amigos como puedo generar un valor aleatoriamente valores que solo sean 'A' y 'D'
en mysql

gracias de antemano
  #2 (permalink)  
Antiguo 12/11/2011, 17:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: generar valores alatorios

Si tienes dos valores posibles, no es exactamente aleatorio, ¿no?
En todo caso lo que podrías usar es un selector que tome un valor aleatorio producido por RAND(), y que defina la selección en base a que el valor obtenido sea par o impar.
Pero la solución, para implementarla, necesitará de un stored procedure, y en ese caso hacerla en MySQL carece de sentido, porque podrías lograr lo mismo, y más eficiente, en un lenguaje de programación, sea cual sea el que uses.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/11/2011, 17:32
 
Fecha de Ingreso: noviembre-2009
Mensajes: 5
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: generar valores alatorios

gracias por responder
pero mi pregunta es simple como ago para k me genere aleatoriamente estas dos letras A y D
es algo mas o menos para esto


CREATE PROCEDURE venta()
BEGIN
DECLARE i INT DEFAULT 1;
declare tipoventa int;
declare letraaleatorio char(1);
WHILE (i<=5) DO
set tipoventa=1+ROUND(RAND()*(2-1));/*GENERA NUMERO ALEATORIO ENTRE 1 Y 2*/
set fecha =str_to_date(concat(floor(1 + rand() * (12-1)),'-',floor(1 + rand() * (28 -1)),'-','2011'),'%m-%d-%Y');
set letraaleatorio=K FUNCION O K PONGO PARA K ME GENERE ENTRE A Y D <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
IF tipoventa=1 then/*1 ES TIPO DE VENTA CREDITO*/
INSERT INTO venta(Tip_Venta,estado_venta,cod_Usuario,monto_ven ta,interes,descuento,fecha_venta,turno_venta,hora_ venta)
VALUES(tipoventa,'0012009',letraaleatorio,10.000,0 .200,0.000,fecha,2,'11:56 AM');
ELSE
INSERT INTO venta(Tip_Venta,estado_venta,cod_Usuario,monto_ven ta,interes,descuento,fecha_venta,turno_venta,hora_ venta)
VALUES(tipoventa,'0012009',letraaleatorio,10.000,0 .000,0.000,fecha,2,'11:56 AM');
END IF;
SET i=i+1;
END WHILE;
END

Última edición por levital; 12/11/2011 a las 17:59
  #4 (permalink)  
Antiguo 12/11/2011, 18:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: generar valores alatorios

Vamos desde el comienzo:
1) Las funciones aleatorias no devuelven caracteres. Sólo lo numérico es aleatorio, por lo que RAND() sólo devuelve un valor numérico.
2) RAND() sólo devuelve un valor aleatorio entre 0.0 y 1.0, po rlo que para evaluar el resultado debe multiplicarse por algún valor potencia de 10. Supongamos 100, para tener un rango seguro de números analizables.
3) Considerando que sólo tienes dos opciones (A y D), podemos usar simplemente el que el número sea par o impar, para determinar cuál es el que pondremos.
4) Determinar si un número es par o no es uno de los ejercicios más básicos de programación: Los impares tienen resto de división al ser divididos por 2...
Entonces la cosa sería:
Código MySQL:
Ver original
  1.   DECLARE tipoventa INT;
  2.   WHILE (i<=5) DO
  3.     SET tipoventa = CAST((RAND()*100) AS UNSIGNED);
  4.     IF (tipoventa % 2) > 0 THEN/*1 ES TIPO DE VENTA CREDITO*/
  5.       INSERT INTO venta(Tip_Venta,estado_venta,cod_Usuario,monto_ven ta,interes,descuento,fecha_venta,turno_venta,hora_ venta)
  6.       VALUES(tipoventa,'0012009',letraaleatorio,10.000,0 .200,0.000,'2009-10-01',2,'11:56 AM');
  7.     ELSE
  8.       INSERT INTO venta(Tip_Venta, estado_venta,cod_Usuario,monto_venta,interes,descuento,fecha_venta,turno_venta,hora_ venta)
  9.       VALUES(tipoventa,'0012009',letraaleatorio,10.000,0 .000,0.000,'2009-10-01',2,'11:56 AM');
  10.     END IF;
  11.     SET i=i+1;
  12.   END WHILE;

Pero aquí hay algo interesante: Todo esto que estás haciendo no tiene ninguna utilidad, porque esto mismo lo podrías hacer directamente en la aplicación, y no derivarle esa responsabilidad a la base de datos, donde no deberías hacerlo. Si lo único que varía es un único valor del INSERT ¿por qué no lo defines en el programa, cuando creas ,dinámicamente la sentencia? ¿Por qué quieres hacerlo en un SP, cuando no se necesita ni produce ninguna utilidad?

A mi entender estás complicando innecesariamente todo el asunto...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:12.