MySQL - Lista de fecha con intervalos

 
Vista:
sin imagen de perfil

Lista de fecha con intervalos

Publicado por Albert (2 intervenciones) el 22/03/2018 02:34:05
Hola, tengo un problema con una consulta Mysql que me tiene loco desde hace 5 días, lo que quiero es obtener una lista de fechas a partir de una sola fecha (sin fecha final) esta es la consulta que hago

1
SELECT REPEAT(ADDDATE('2018-03-21', INTERVAL 2 DAY), 3);

Pero me devuelve “2018-03-23” tres veces, lo que quiero que me devuelva es
2018-03-23
2018-03-25
2018-03-27

Nota: La consulta se le hace al motor BD directamente sin utilizar tablas de ninguna base de datos.
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Lista de fecha con intervalos

Publicado por Leonardo Josué (414 intervenciones) el 22/03/2018 15:58:50
Hola Albert:

Creo que estás confundiendo el uso de REPEAT como función y el uso de REPEAT como ciclo:

tal como lo tienes, la FUNCION REPEAT lo que hace es repetir una cadena n veces:

1
2
3
4
5
6
7
mysql> SELECT REPEAT('Hola', 3);
+-------------------+
| REPEAT('Hola', 3) |
+-------------------+
| HolaHolaHola      |
+-------------------+
1 row in set (0.00 sec)

Mientras que lo que tú quieres hacer es repetir una acción n veces, entonces no usas el REPEAT en un SELECT sino que lo tienes que hacer por ejemplo en una Procedimiento Almacenado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> DELIMITER $$
mysql> DROP PROCEDURE IF EXISTS repeat_intervalo$$
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE PROCEDURE repeat_intervalo()
    ->     BEGIN
    ->         DROP TABLE IF EXISTS fechas;
    ->         CREATE TABLE fechas (fecha DATE);
    ->         SET @X = 1;
    ->         SET @fecha = '2018-03-21';
    ->         REPEAT
    ->           SET @fecha = ADDDATE(@fecha, INTERVAL 2 DAY);
    ->           INSERT INTO fechas VALUES (@fecha);
    ->           SET @X = @X + 1;
    ->         UNTIL @X > 3 END REPEAT;
    ->         SELECT * FROM fechas;
    ->     END$$
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER ;
mysql> CALL repeat_intervalo();
+------------+
| fecha      |
+------------+
| 2018-03-23 |
| 2018-03-25 |
| 2018-03-27 |
+------------+
3 rows in set (0.59 sec)
 
Query OK, 0 rows affected (0.60 sec)

Observa que en el procedimiento almacenado creo una tabla FECHAS y voy insertando cada vuelta del CICLO REPEAT una fecha y utilizo un contador para controlar el número de veces que se repite el ciclo.

Finalmente, otra manera más "Simple" de hacer lo que quieres sin usar Procedimientos almacenados es con UNION's, así:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT ADDDATE('2018-03-21', INTERVAL 2 DAY) fecha
    -> UNION
    -> SELECT ADDDATE('2018-03-21', INTERVAL 4 DAY) fecha
    -> UNION
    -> SELECT ADDDATE('2018-03-21', INTERVAL 6 DAY) fecha;
+------------+
| fecha      |
+------------+
| 2018-03-23 |
| 2018-03-25 |
| 2018-03-27 |
+------------+
3 rows in set (0.00 sec)

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
2
Comentar
sin imagen de perfil

Lista de fecha con intervalos

Publicado por Albert (2 intervenciones) el 25/03/2018 03:58:52
Waoooo Leonardo Josué eres un AS, mil gracias, por fin! encontré lo que buscaba gracias a ti, me funcionó de maravilla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar