SQL - SQL obtener horas con rango de tiempo en minutos

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

SQL obtener horas con rango de tiempo en minutos

Publicado por JHOPAHE (2 intervenciones) el 06/02/2019 14:24:13
Buenos días a todos, soy nuevo en el foro y me gustaría compartir un problema, teniendo la certeza que puedan ayudarme:

estoy realizando una APP para ips donde al momento de asignar una cita medica el sistema debe consultar 1 una tabla llamada tabla_agendas donde debe verificar si hay agendas para el dia seleccionado, en caso que si exista agenda necesito una sentencia que seleccione la fecha de la agenda ejemplo

fecha_inicio: 2019-02-05 08:00:00.000 fecha fin : 2019-02-05 13:00:00.000
y me muestre esta en un rango de minutos seleccionado por el usuario ejemplo cada 20 minutos, debe quedar algo como asi:

2019-02-05 08:00:00.000
2019-02-05 08:20:00.000
2019-02-05 08:40:00.000
2019-02-05 09:00:00.000
2019-02-05 09:20:00.000
2019-02-05 09:40:00.000
2019-02-05 10:00:00.000
2019-02-05 10:20:00.000
2019-02-05 10:40:00.000
2019-02-05 11:00:00.000
2019-02-05 11:20:00.000
2019-02-05 11:40:00.000
2019-02-05 12:00:00.000
2019-02-05 12:20:00.000
2019-02-05 12:40:00.000


de ante mano muchas gracias
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

SQL obtener horas con rango de tiempo en minutos

Publicado por leonardo_josue (1172 intervenciones) el 06/02/2019 15:54:09
Hola JHOPAHE:

Los DBMS trabajan con información que ya existe en la Base de Datos, no con información 'inventada'. A qué me refiero con esto, a que no hay una sentencia SQL que "genere" la información que tu quieres. Aquí tienes de dos sopas:

1. Creas una tabla en modelo de base de datos con todos los intervalos que te interesen (sólo la hora, en realidad la fecha no te interesa) es decir, algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT * FROM horas;
+---------+----------+
| id_hora | hora     |
+---------+----------+
|       1 | 08:00:00 |
|       2 | 08:20:00 |
|       3 | 08:40:00 |
|       4 | 09:00:00 |
|       5 | 09:20:00 |
|       6 | 09:40:00 |
|       7 | 10:00:00 |
|       8 | 10:20:00 |
|       9 | 10:40:00 |
|      10 | 11:00:00 |
+---------+----------+
10 rows in set (0.00 sec)

de tal suerte que si quieres consultar los horarios entre las 9:20 y las 10:40, simplemente haces algo así:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM horas WHERE hora between '09:20:00' and '10:40:00';
+---------+----------+
| id_hora | hora     |
+---------+----------+
|       5 | 09:20:00 |
|       6 | 09:40:00 |
|       7 | 10:00:00 |
|       8 | 10:20:00 |
|       9 | 10:40:00 |
+---------+----------+
5 rows in set (0.02 sec)

2. Creas un Procedimiento almacenado en el que puedas utilizar CICLOS para ir insertando en una tabla temporal los intervalos que te interesan.

en Pseudocódigo sería algo asi:

1
2
3
4
5
6
7
8
9
10
11
PROCEDIMIENTO horas (hora_ini TIME, hora_fin TIME)
INICIAR
   hora = hora_ini;
   CREA TABLA TEMPORAL t_horas(hora TIME);
   MIENTRAS QUE hora <= hora_fin ENTONCES
      INSERT INTO t_horas (hora);
      hora = hora + 20 minutos;
   FIN MIENTRAS
   REGRESAR SELECT hora FROM t_horas;
   BORRAR TABLA TEMPORAL t_horas;
FIN

¿Se entiende más o menos la idea?

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