SQL - Consulta con Fecha y Hora

   
Vista:

Consulta con Fecha y Hora

Publicado por Juan Carlos C jccol@hotmail.com (9 intervenciones) el 19/07/2012 19:27:49
Hola Todos,

Tengo una Tabla con los campos Valor, Fecha (dd/mm/aaaa) y Hora (hh:nn:ss)

Necesito sumar todos los Valores entre una Fecha a partir de una hora especifica Hasta Otra Fecha y otra Hora especifica.

es decir:

Sume todos los valores desde el 20/06/2012 a las 3PM hasta el 21/06/2012 a los 3PM

No puedo utilizar un solo campo con formato fecha larga.

De antemano Gracias por la 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

Consulta con Fecha y Hora

Publicado por leonardo_josue (877 intervenciones) el 19/07/2012 20:32:55
Hola Juan Carlos C:

Nos nos dices con qué BD estás trabajando y sin esta información es muy difícil darte una respuesta puntual. Tienes que recordar que aunque la mayoría de las BD utilizan SQL como lenguajes de consultas, tienen diferencias importantes en cuanto a la sintaxis, sobre todo en el manejo precisamente de fechas y horas. Tampoco nos dices qué tipo de datos tienes en tus tablas, puedo suponer que se tratan de tipo DATE y TIME respectivamente y que no hayas cometido el error de almacenar los datos como VARCHAR.

Por lo pronto, con pseudocódigo de podría decir, que una de las maneras que tienes para hacer esto sería así:

1
2
3
4
5
6
SECCIONAR los campos que necesites
DE tu TABLA
DONDE
(FECHA = '2012-06-20'  y HORA ENTRE '15:00:00' y las '23:59:59')
o
(FECHA = '2012-06-21'  y HORA ENTRE '00:00:00' y las '15:00:00')


y aquí está cómo sería en MySQL

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
mysql> SELECT * FROM tabla;
+------+------------+----------+-------+
| id   | fecha      | hora     | valor |
+------+------------+----------+-------+
|    1 | 2012-06-20 | 14:59:59 |    10 |
|    2 | 2012-06-20 | 15:00:00 |    21 |
|    3 | 2012-06-20 | 23:59:59 |    32 |
|    4 | 2012-06-21 | 00:00:00 |    43 |
|    5 | 2012-06-21 | 15:00:00 |    54 |
|    6 | 2012-06-21 | 15:00:01 |    65 |
+------+------------+----------+-------+
6 rows in set (0.01 sec)
 
mysql> SELECT *
    -> FROM tabla
    -> WHERE
    -> (fecha = '2012-06-20' AND hora BETWEEN '15:00:00' AND '23:59:59')
    -> OR
    -> (FECHA = '2012-06-21'  AND hora BETWEEN '00:00:00' AND '15:00:00');
+------+------------+----------+-------+
| id   | fecha      | hora     | valor |
+------+------------+----------+-------+
|    2 | 2012-06-20 | 15:00:00 |    21 |
|    3 | 2012-06-20 | 23:59:59 |    32 |
|    4 | 2012-06-21 | 00:00:00 |    43 |
|    5 | 2012-06-21 | 15:00:00 |    54 |
+------+------------+----------+-------+
4 rows in set (0.00 sec)


(No pongo el SUM para que se vea qué registros son los que se están seleccionando). La mayoría de los motores de BD (SQL Server, Oracle, MySQL, etc) manejan el formato de fecha ANSI 'yyyy-mm-dd hh:mi:ss', es recomendable que utilices siempre un formato estándar.

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
0
Comentar

Consulta con Fecha y Hora

Publicado por Juan Carlos C jccol@hotmail.com (9 intervenciones) el 19/07/2012 21:05:17
Si Leo, así es... Muchas Gracias
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

Consulta con Fecha y Hora

Publicado por Juan Carlos C jccol@hotmail.com (9 intervenciones) el 19/07/2012 21:46:27
Hola Leo,

Me surge una pregunta... Que pasa cuando los días no son consecutivos?

Ie, del 20/06/2012 a las 3PM hasta el 30/06/2012 hasta las 3PM
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

Consulta con Fecha y Hora

Publicado por leonardo_josue (877 intervenciones) el 19/07/2012 23:25:19
Hola de nuevo Juan Carlos C:

Aquí habría que cambiar las condiciones, por ejemplo, si de los dias entre las dos fechas te interesan todos los registros, independientemente de la hora (es decir, para los días del 21 al 20 tomar las 24 horas del día) tendrías que hacer más o menos esto:

1
2
3
4
5
6
7
8
SELECT *
FROM tabla
WHERE
(fecha = '2012-06-20' AND hora BETWEEN '15:00:00' AND '23:59:59')
OR
(fecha BETWEEN 2012-06-21 AND 2012-06-29)
OR
(FECHA = '2012-30-21'  AND hora BETWEEN '00:00:00' AND '15:00:00');


Es decir, se agrega una condición para validar las fechas intermedias, pero sin tomar en cuenta las horas. Recuerda, las condiciones del WHERE pueden ser tan sencillas o tan complicadas como necesites... sólo es cuestión de jugar un poco con los operadores lógicos.

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
0
Comentar