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

Sumar Fechas e insertar cantidad de días

Estas en el tema de Sumar Fechas e insertar cantidad de días en el foro de Mysql en Foros del Web. Hola gente he encontrado esta web y me pareció EXCELENTE es por ello que tengo una consulta y puedo recurrir a utds. Resulta que estoy ...
  #1 (permalink)  
Antiguo 08/02/2012, 14:29
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Sumar Fechas e insertar cantidad de días

Hola gente he encontrado esta web y me pareció EXCELENTE es por ello que tengo una consulta y puedo recurrir a utds. Resulta que estoy iniciándome en esto de mysql y estoy probando un sistema al cual hay que agregarle un campo (número de días) a una tabla ya creada con sus respectivos campos (id, rut, nombre, fecha_inicio, fecha_termino, cargo)... esta tabla necesita sumar dos fechas (fecha_inicio y fecha_termino) y agregarle al campo creado la cantidad de días sumados.

Mi consultas es como puedo hacerlo para que cada vez que ingreso la fecha desde phpmyadmin de forma automática aparezca en el campo de la tabla numero de días (la cantidad de días contados... ) se puede lograr con un disparador? o solo se puede con programación php?

Espero me entiendan...

Saludos.
  #2 (permalink)  
Antiguo 08/02/2012, 15:24
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

A ver si te sirve esto:

Código MySQL:
Ver original
  1. select period_diff(date_format(fecha1,'%Y%m'),date_format(fecha2,'%Y%m'))
  2. from tabla;

Esto te dara el numero de dias entre las fechas.

esta la podrias usar en un trigger:

Código MySQL:
Ver original
  1. create trigger dias before insert on tabla
  2. set new.dias=select period_diff(date_format(new.fecha1,'%Y%m'),date_format(new.fecha2,'%Y%m'))
  3. from tabla;

antes de insertar el registro nuevo calculara los dias y los insertara en el campo dias que crees.

ojala y te sirva.
  #3 (permalink)  
Antiguo 08/02/2012, 16:20
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

Mira la estructura me quedó así...

Código MySQL:
Ver original
  1. CREATE trigger dias before INSERT on num_diast
  2. SET new.dias=SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador;

sin embargo algo hice mal porque me da este error:

Código MySQL:
Ver original
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_te' at line 3

La idea es que llene automáticamente el campo num_diast para no ingresarlos de a uno ya que son muchos registros... porque como menciono tuve que crearle a la tabla ese nuevo campo.

Última edición por carreteboy; 09/02/2012 a las 06:54
  #4 (permalink)  
Antiguo 09/02/2012, 08:29
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

Hola, creo que me falto encerrar en parentesis la sentencia select.

prueba a ver.

Código MySQL:
Ver original
  1. CREATE trigger dias before INSERT on num_diast
  2. SET new.dias=(SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador)
  #5 (permalink)  
Antiguo 09/02/2012, 08:38
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

Cita:
Iniciado por carreteboy Ver Mensaje
Hola gente he encontrado esta web y me pareció ....

Mi consultas es como puedo hacerlo para que cada vez que ingreso la fecha desde phpmyadmin de forma automática aparezca en el campo de la tabla numero de días ...
Espero me entiendan...

Saludos.
El trigger te servira para solucionar lo que expresaste aqui.

y para los registros que ya tenias en la tabla, puedes usar un update con la misma sintaxis dentro del trigger.

Código MySQL:
Ver original
  1. update num_diast set dias=(PERIOD_DIFF(DATE_FORMAT(fecha_inicio,'%Y%m'),DATE_FORMAT(fecha_termino,'%Y%m')))

Recuerda que el trigger tiene que dispararse sobre la tabla donde se insertara el registro, tengo dudas sobre el que pusiste, porque tienes "before insert on num_dias", num_dias es la tabla donde se insertaran los registros?, y luego en la sentencia select tiene ".... from solicitud_trabajador" ?????, a mi me pareceria que tendria que ser la misma tabla arriba y abajo, pero habria que ver la estructura de tus tablas para entenderlo mejor.

Última edición por LENINCASCO; 09/02/2012 a las 08:46
  #6 (permalink)  
Antiguo 09/02/2012, 09:31
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

la tabla es solicitud_trabajador, yo lo puse mal... ahora lo cambié pero me aparece lo siguiente:

Modificado
Código MySQL:
Ver original
  1. CREATE trigger dias before INSERT on solicitud_trabajador
  2. SET new.dias=(SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador)

Error:
Código MySQL:
Ver original
  1. #1054 - Unknown column 'dias' in 'NEW'
  #7 (permalink)  
Antiguo 09/02/2012, 10:06
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

dias, es el campo que recien agregaste a la tabla, imagino que ha de ser num_diast.
yo le puse dias porque no tenia el nombre de tu campo, solo es sustituirlo.
  #8 (permalink)  
Antiguo 09/02/2012, 10:23
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

perfecto ahora me funciona correctamente el trigger.

Código MySQL:
Ver original
  1. CREATE trigger num_diast before INSERT on solicitud_trabajador
  2. SET new.num_diast=(SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador)


El update se ejecutó correctamente pero no me cambío el campo siguen los datos en 0.. y no me generó error.

Código MySQL:
Ver original
  1. UPDATE solicitud_trabajador SET num_diast=(PERIOD_DIFF(DATE_FORMAT(fecha_inicio,'%Y%m'),DATE_FORMAT(fecha_termino,'%Y%m')))
  #9 (permalink)  
Antiguo 09/02/2012, 11:11
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

Estimado, quiero disculparme por la respuesta que te di, esta parcialmente mala.
te estaba poniendo para diferencia en meses y no en dias.

para calcular los dias es
Código MySQL:
Ver original
  1. datediff(fecha_termino,fecha_inicio)

el resto de procedimientos seria igual, solo hay que cambiar la instruccion.

mil disculpas.
  #10 (permalink)  
Antiguo 09/02/2012, 11:41
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

ok, voy a probar y te cuento, muchas gracias por tu tiempo.. apenas resulte te aviso..

estimado acabo de probar y aun me aparece en cero y -1 el num_diast

recuento:

trigger
Código MySQL:
Ver original
  1. CREATE TRIGGER num_diast BEFORE INSERT ON solicitud_trabajador
  2.  FOR EACH ROW SET new.num_diast=(SELECT PERIOD_DIFF(DATE_DIFF(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador)

update
Código MySQL:
Ver original
  1. UPDATE solicitud_trabajador SET num_diast=(PERIOD_DIFF(DATE_FORMAT(fecha_inicio,'%Y%m'),DATE_FORMAT(fecha_termino,'%Y%m')))

Última edición por carreteboy; 09/02/2012 a las 11:46
  #11 (permalink)  
Antiguo 09/02/2012, 11:51
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

tienes que cambiar period_diff por datediff(fecha_termino,fecha_inicio)
  #12 (permalink)  
Antiguo 09/02/2012, 12:03
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

Me puedes revisar si ahora estan bien las sentencias? me aparecieron nuevos errores pero debe ser porque algo escribi mal.

trigger
Código MySQL:
Ver original
  1. CREATE TRIGGER DIAS_T BEFORE INSERT ON solicitud_trabajador
  2.  FOR EACH ROW SET new.num_diast=(SELECT PERIOD_DIFF(DATE_FORMAT(new.fecha_inicio,'%Y%m'),DATE_FORMAT(new.fecha_termino,'%Y%m'))
  3. FROM solicitud_trabajador)

update
Código MySQL:
Ver original
  1. UPDATE solicitud_trabajador SET num_diast=(PERIOD_DIFF(DATE_FORMAT(fecha_inicio,'%Y%m'),DATE_FORMAT(fecha_termino,'%Y%m')))

que tengo mal escrito?
  #13 (permalink)  
Antiguo 09/02/2012, 12:09
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

Esto es lo que vas a hacer:
1. vas a eliminar el trigger que tenias creado, utilizando esta sentencia:
Código MySQL:
Ver original
  1. drop trigger DIAS_T

luego de eso lo vas a volver a crear de la siguiente manera:

Código MySQL:
Ver original
  1. CREATE TRIGGER DIAS_T BEFORE INSERT ON solicitud_trabajador
  2.  FOR EACH ROW SET new.num_diast=(SELECT DATEDIFF(new.fecha_termino,new.fecha_inicio)  
  3. FROM solicitud_trabajador)

luego vas a hacer el update de la siguiente manera:

update solicitud_trabajador set num_diast=datediff(fecha_termino,fecha_inicio)

y con eso tendrias que tener todo.

Hora de almuerzo en Nicaragua asi que comentas por la tarde.
Suerte.
  #14 (permalink)  
Antiguo 09/02/2012, 12:11
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Sumar Fechas e insertar cantidad de días

Esto es lo que vas a hacer:
1. vas a eliminar el trigger que tenias creado, utilizando esta sentencia:
Código MySQL:
Ver original
  1. drop trigger DIAS_T

luego de eso lo vas a volver a crear de la siguiente manera:

Código MySQL:
Ver original
  1. CREATE TRIGGER DIAS_T BEFORE INSERT ON solicitud_trabajador
  2.  FOR EACH ROW SET new.num_diast=(SELECT DATEDIFF(new.fecha_termino,new.fecha_inicio)  
  3. FROM solicitud_trabajador)

luego vas a hacer el update de la siguiente manera:

Código MySQL:
Ver original
  1. update solicitud_trabajador set num_diast=datediff(fecha_termino,fecha_inicio)

y con eso tendrias que tener todo.

Hora de almuerzo en Nicaragua asi que comentas por la tarde.
Suerte.
  #15 (permalink)  
Antiguo 09/02/2012, 12:14
 
Fecha de Ingreso: febrero-2012
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

ahaha no hay problema muchas gracias. Entonces también almorzaré acá son las 15:11 (Chile) te espero más tarde.

te dejo el error que surgió.
Código MySQL:
Ver original
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' FOR EACH ROW SET new.num_diast=(SELECT DATEDIFF(new.fecha_termino,new.fecha_in' at line 2

error resuelto: agregar ´´ a fecha_inicio y fecha_termino

SELECT DATEDIFF('new.fecha_termino','new.fecha_inicio') FROM solicitud_trabajador

Código MySQL:
Ver original
  1. CREATE TRIGGER DIAS_T BEFORE INSERT ON solicitud_trabajador
  2. *FOR EACH ROW SET new.num_diast=(SELECT DATEDIFF(new.fecha_termino,new.fecha_inicio) *
  3. FROM solicitud_trabajador)

MUCHAS GRACIAS RESULTÓ PERFECTO SALUDOS DESDE CHILE

Última edición por carreteboy; 09/02/2012 a las 12:23
  #16 (permalink)  
Antiguo 10/09/2012, 11:43
 
Fecha de Ingreso: septiembre-2012
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Sumar Fechas e insertar cantidad de días

Hola quisiera que si pueden me ayuden tengo un trigger parecido al que elaboran aqui CREATE TRIGGER DIAS_T before INSERT ON punto FOR EACH ROW SET new.duracion =(SELECT TIMEDIFF(NEW.horaf,NEW.horai) FROM punto)'
el trigger funciona lo que yo quiero es que despues de insertar una fila en ls tabla me calcule la diferencia de tiempo entre los campos horaf y horai pero cuando trato de insertar un registro nuevo me dice que la subconsulta retorna mas de un campo alguna idea de porque retorna mas de un campo y como puedo resolver este asunto???

Etiquetas: contar+dias, sumar+fechas, tablas, trigger
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 03:36.