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

Comparación de Fechas con Between

Estas en el tema de Comparación de Fechas con Between en el foro de Mysql en Foros del Web. Buenas. Tengo un problema comparando fechas en mysql. Estoy haciendo un sistema para el manejo de los cursos de una institución, y una de las ...
  #1 (permalink)  
Antiguo 24/07/2012, 19:13
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 1 mes
Puntos: 0
Comparación de Fechas con Between

Buenas. Tengo un problema comparando fechas en mysql. Estoy haciendo un sistema para el manejo de los cursos de una institución, y una de las validaciones es que a una sección de un curso no le puedo asignar un horario que haya sido tomado por otra sección antes de abrir la nueva para que no choquen los horarios de la sala en que ven clases. Por eso tengo que verificar las fechas de inicio y finalización de actividades escolares de cada sección.Me recomendaron usar Between pero no me ha funcionado.
Mis fechas en mysql en la base de datos son formato DATE

Mis tablas son:

Seccion
curso || numero_seccion || Estado || cupo || fechainicio || fechafin || sala

seccion_horario
curso || numero_seccion || cod_horario

Lo que deseo hacer es verificar que cuando ingrese una nueva sección en un rango de fecha revisar que no exista en ese rango en otra sección el mismo horario en esa sala. Alguién me podría ayudar con la consulta , por favor.
  #2 (permalink)  
Antiguo 24/07/2012, 20:12
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: Comparación de Fechas con Between

A veces, para ver con claridad, lo que te conviene es escribir un pseudocódigo que te sirva de guía. Algo como (aplicando por lógica inversa):
Cita:
Para ser válido:
- Fecha de inicio y final no debe quedar comprendida dentro de otro registro.
- La fecha de inicio no debe quedar entre fecha de inicio y final de otro.
- La fecha final no debe quedar entre el inicio y final de otro.
- El período nuevo no debe superponerse al de otro período ya existente.
Si te fijas, la segunda y tercera condiciones ya incluyen a la primera, por lo que podemos descartar esa. Pero no podemos descartar la cuarta.
Entonces eso sería:
Código MySQL:
Ver original
  1. ...
  2. (fechainicionueva NOT BETWEEN fechainicio AND fechafinal)
  3. (fechafinalnueva NOT BETWEEN fechainicio AND fechafinal)
  4. (fechainicionueva <= fechainicio AND fechafinalnueva >= fechafinal)
Me parece que con eso es suficiente.

En ese contexto, si la consults devuelve al menos un registro, entonces los datos que se quieren insertar no son válidos.
__________________
¿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 24/07/2012, 21:48
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Comparación de Fechas con Between

Gracias por tu ayuda pero verás eso no soluciona mi problema. Porque sólo me selecciona aquellas secciones cuyas fechas de inicio y fin esten en el rango dado registradas en la base de datos. Lo que no me funciona es la manera en que trabaja el BETWEEN porque sólo me lanzará el error cuando haya un registro en base de datos entre esas fechas , pero lo que necesito saber es si las fechas de inicio y fin de 2 secciones coinciden para no asignarles la sala en el mismo horario, es decir, sólo puedo registrar la segunda sección con ese horario en esa sala si ya las clases de la primera sección han terminado.
  #4 (permalink)  
Antiguo 24/07/2012, 22:01
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Comparación de Fechas con Between

ponte yo tengo un curso del 25 03 al 30 03 de lunes a martes en la sala 1 con horario 1
suponte que quiera abrir otra cohorte de x curso que comienza el 27 03 al 01 04
en la misma sala 1 y con el horario 1
el between me va a permitir agregar la secci[on porque el regitro esta en el 25 mas en el 27 no hay nada registrado
no se si me captas
y lo mismo pasa con los < >=
  #5 (permalink)  
Antiguo 24/07/2012, 22:07
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: Comparación de Fechas con Between

Cita:
lo que necesito saber es si las fechas de inicio y fin de 2 secciones coinciden para no asignarles la sala en el mismo horario, es decir, sólo puedo registrar la segunda sección con ese horario en esa sala si ya las clases de la primera sección han terminado.
Si lo razonas bien, no es que no te sirva lo que te digo, sino que significaría agregar una condición a las que ya te dije... Que no pueda ser igual el inicio del registro entrante a al menos uno de los finales de los que ya estén en la tabla.
Lo único que tienes que hacer es plantearte el razonamiento por partes, y luego simplificarlo para escribirlo de un modo no redundante...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 24/07/2012, 22:12
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: Comparación de Fechas con Between

Cita:
Iniciado por hottiecool Ver Mensaje
ponte yo tengo un curso del 25 03 al 30 03 de lunes a martes en la sala 1 con horario 1
suponte que quiera abrir otra cohorte de x curso que comienza el 27 03 al 01 04
en la misma sala 1 y con el horario 1
el between me va a permitir agregar la secci[on porque el regitro esta en el 25 mas en el 27 no hay nada registrado
no se si me captas
y lo mismo pasa con los < >=
Yo lo entiendo, pero parece que no conoces de lógica proposicional. El caso que planteas queda incluido en el primer BETWEEN que te planteo, porque se evalúa cada una de las opciones separadamente, y si al menos una (eso es el OR) se cumple, todo es TRUE.

Para mayor claridad: Si ya tienes registrado un curso entre el 25/03 y el 01/04, no puedes poner uno que comience el 27/03 porque esa fecha está justo entre las otras dos. La idea es que si la consulta vuelve con datos, es porque ese curso coincide con alguno, y no puede registrarse. Quitales los NOT, y la logica se invierte.

¿Entiendes a qué me refiero cuando hablo de "lógica inversa"? Es cuando en lugar de buscar lo que se cumple, descartas todo lo que no se cumple, por ejemplo. Por definción, cuando niegas todo lo verdadero, lo que resta es falso (y viceversa).

Por cierto, BETWEEN determina rangos de entorno cerrado, por lo que si pones BETWEEN 1 AND 30, el 1 y el 30 están incluidos... En ese contexto, en tu ejemplo, sólo podrías registrar el curso si el nuevo curso comienza el 01/04.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/07/2012 a las 22:19

Etiquetas: sql, tabla
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 01:24.