MySQL - diferencia o restar dos fechas

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 13 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

diferencia o restar dos fechas

Publicado por roger (5 intervenciones) el 07/11/2018 03:25:57
Que tal compañeros mi situación es la siguiente, tengo 2 fechas, fechai inicial y fecha final.
Lo que necesito es obtener los MESES que estén dentro de este rango de fechas .
Para ello se me ocurre restar la fecha final a la fecha inicial, para buscar todos los meses que estén dentro de este rango de fechas.

EJEMPLO:

fechaInicial: 2018-11-06 15:48:41 - fechaFinal: 2019-01-29 15:48:41

los meses que me devolvería esta resta es de noviembre del 2018 a enero del 2019.
por lo tanto son :3
y necesito obtener :
NOVIEMBRE, DICIEMBRE Y ENERO. como resultado final.
De antemano les agradezco su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

diferencia o restar dos fechas

Publicado por leonardo_josue (414 intervenciones) el 07/11/2018 18:32:31
Hola Roger:

Lamentablemente no hay una forma "simple" de obtener lo que quieres. Te recomendaría pensar en hacer una función o un SP para hacer lo que necesitas, o en su defecto hacer uso de una tabla "extra" con los nombres de los meses para hacer una consulta... sería más o menos así:

Lo primero sería tener una tabla con los 12 meses... esto es necesario porque los motores de BD's sólo trabajan con información "EXISTENTE" en la misma base de datos... es decir, algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT * FROM meses;
+--------+-------------+
| id_mes | descripcion |
+--------+-------------+
|      1 | ENERO       |
|      2 | FEBRERO     |
|      3 | MARZO       |
|      4 | ABRIL       |
|      5 | MAYO        |
|      6 | JUNIO       |
|      7 | JULIO       |
|      8 | AGOSTO      |
|      9 | SEPTIEMBRE  |
|     10 | OCTUBRE     |
|     11 | NOVIEMBRE   |
|     12 | DICIEMBRE   |
+--------+-------------+
12 rows in set (0.00 sec)

Ahora, sobre esta tablas, podrías usar las fechas inicial y final para filtrar los registros que quieres mostrar, por ejemplo con las funciones MONTH y BETWEEN, supongamos que tu fecha inicial sea 2018-11-06 y la fecha final sea 2018-12-29, entonces, la consulta podría quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SET @fechainicial = '2018-11-06 15:48:41';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SET @fechafinal   = '2018-12-29 15:48:41';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT
    ->   descripcion
    -> FROM meses
    -> WHERE
    ->   id_mes between MONTH(@fechainicial) and MONTH(@fechafinal);
+-------------+
| descripcion |
+-------------+
| NOVIEMBRE   |
| DICIEMBRE   |
+-------------+
2 rows in set (0.00 sec)

El problema con esta consulta es que NO FUNCIONA SI LA FECHA FINAL ES DE DIFERENTE AÑO, como en tu ejemplo:

1
2
3
4
5
6
7
8
9
10
mysql> SET @fechainicial = '2018-11-06 15:48:41';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @fechafinal   = '2019-01-29 15:48:41';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
    ->   descripcion
    -> FROM meses
    -> WHERE
    ->   id_mes between MONTH(@fechainicial) and MONTH(@fechafinal);
Empty set (0.00 sec)

Entonces, cuando las fechas inicial y final TENGAN AÑOS DISTINTOS entonces la condición ya no funciona. Te toca entonces a ti buscar una alternativa para este caso en especial.

Finalmente una consideración, ¿qué pasaría si la fecha final tiene más de 12 meses de diferencia con la fecha inicial?

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar