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

[SOLUCIONADO] Update en mysql

Estas en el tema de Update en mysql en el foro de Mysql en Foros del Web. Buenas, quiero hacer un update en mi base de datos de forma tal que, la fecha de entrega de un pedido sea igual a la ...
  #1 (permalink)  
Antiguo 01/04/2013, 10:00
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Update en mysql

Buenas,
quiero hacer un update en mi base de datos de forma tal que, la fecha de entrega de un pedido sea igual a la fecha de compra + entre 5 y 9 días.
estoy intentando hacer:

Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET DAY(FECHA_ENTREGA) = SELECT
  3. (
  4. DAY(FECHA_COMPRA) + CEIL(5 + RAND()*4)
  5. )
  6. WHERE DAY(FECHA_ENTREGA) = (SELECT DAY(FECHA_ENTREGA))
  7. ;

pero no me sale, me da error, he probado a no poner select pero nada, no se me ocurre nada, alguna idea?
gracias!
  #2 (permalink)  
Antiguo 01/04/2013, 10:50
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, 5 meses
Puntos: 2658
Respuesta: Update en mysql

Por un lado, la consulta que estás haciendo es innecesariamente complicada.
Por otro, esto:
Cita:
quiero hacer un update en mi base de datos de forma tal que, la fecha de entrega de un pedido sea igual a la fecha de compra + entre 5 y 9 días.
Es algo que deberías determinar en la aplicación y no en la base, donde no tiene utilidades prácticas hacerlo.
En cuanto a la consulta en sí, hay algunos errores:
1) No puedes aplicar una función al campo que estás actualizando porque no es un dato de salida, sino que debe aplicarse al valor de entrada.
2) No se requieren SELECT para tomar valores creados por función, o que provienen de funciones. Se usan directamente.
Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET FECHA_ENTREGA = ADDDATE(FECHA_COMPRA, CEIL(5 + (RAND()*4)))
  3. WHERE FECHA_ENTREGA = FECHA_COMPRA;
__________________
¿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 01/04/2013, 11:05
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Update en mysql

ok.

entiendo, gracias.

es que no he podido hacerme con un manual bueno de mysql.
entonces, por ejemplo, si quisiera cambiar el año de la fecha de compra de pedidos, si quisiera por ejemplo cambiar de 2013 a 2012

Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET YEAR(FECHA_COMPRA) = "2012"
  3. WHERE YEAR(FECHA_COMPRA) = "2013"
  4. ;

esto estaría mal porque no puedo aplicar una función (en este caso year) a un dato de entrada, osea, no puedo hacer year(fecha_compra).
pero,entoces, una duda que me sale es
¿cómo podría cambiar el año de la fecha de compra de 2013 A 2012?
  #4 (permalink)  
Antiguo 01/04/2013, 11:17
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, 5 meses
Puntos: 2658
Respuesta: Update en mysql

Cita:
es que no he podido hacerme con un manual bueno de mysql.
Tomate el tiempo de googlear con mejores parámetros. Te puedes dar la idea que si existe una pagina oficial de MySQL, en esa misma página seguro que deben aparecer los manuales...
¿No te parece?
Algo tan sencillo como buscar tres palabras: reference manual MySQL (Si, esto es un link)
En el manual de referencia (todos los DBMS tienen uno on-line) vas a encontrar las funciones que buscas: http://dev.mysql.com/doc/refman/5.0/es/functions.html

Volviendo a tu problema, como ya te dije, no puedes aplicar funciones a los campos de entrada, así que no hagas esto:
Código MySQL:
Ver original
  1. SET YEAR(FECHA_COMPRA) = "2012"
¿Te queda claro?

Eso NO SE HACE.

El WHERE... eso es otro tema.

En realidad tu problema tiene una solución muy elemental, que con sólo googlear la misma función que puse (ADDDATE()), podrías haber encontrado, ya que esa misma tiene dos formas de parametrización:
Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET FECHA_COMPRA = ADDDATE(FECHA_COMPRA, INTERVAL 1 YEAR)
  3. WHERE YEAR(FECHA_ENTREGA) < YEAR(CURDATE());
que bien puedo escribir así:
Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET FECHA_COMPRA = ADDDATE(FECHA_COMPRA, INTERVAL 1 YEAR)
  3. WHERE YEAR(FECHA_ENTREGA) = 2012;

O incluso:
Código MySQL:
Ver original
  1. UPDATE PEDIDOS
  2. SET FECHA_COMPRA = ADDDATE(FECHA_COMPRA, INTERVAL 1 YEAR)
  3. WHERE YEAR(FECHA_ENTREGA) (= YEAR(CURDATE()) -1);

PD: No uses comillas (") o apostrofos (') indiscriminadamente. En SQL no tienen el mismo uso, e incluso eso varía en cada DBMS.
Las cadenas de texto en MySQL van siempre entre apóstrofos, no entre comillas. Y los valores numéricos jamás deben ir entre apostrofos, porque no son cadenas de texto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 01/04/2013, 11:32
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Update en mysql

Vale, ya he visto que existe una funcion date_sub
  #6 (permalink)  
Antiguo 01/04/2013, 11:32
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Update en mysql

ok, miraré el manual oficial y me ahorro dolores de cabeza,gracias!!

Etiquetas: select, update
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 06:11.