Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   La mejor forma de utilizar las horas en SQLServer (https://www.clubdelphi.com/foros/showthread.php?t=37258)

Alexander 08-11-2006 01:01:23

La mejor forma de utilizar las horas en SQLServer
 
Hola a todos.

Estoy buscando cual es la mejor forma de utilizar las horas en SQL Server.

Tengo una tabla que tiene un campo llamado Hora y es de tipo DateTime.

Si almaceno la hora por medio de ADO con un parámetro, me almacena la poniendole am o pm.

Ejemplo 04:00:00 p.m.

Si lo hago formado la instrucción como una cadena, me escribe la fecha más vieja del sistema y seguido la hora que coloque.

Ejemplo 01/01/1989 04:00:00 p.m.

Cuando quiero trabajar las horas es muy complicado, hacer compraciones, actualizaciones por medio de esa hora, etc.

Cual es la mejor forma de utilizar las horas tanto en la base de datos como en desarrollo?

Gracias por leer este mensaje y por sus comentarios.

Alexander.

oscarnoe 08-11-2006 02:06:15

Cita:

Empezado por Alexander
Hola a todos.

Estoy buscando cual es la mejor forma de utilizar las horas en SQL Server.

Tengo una tabla que tiene un campo llamado Hora y es de tipo DateTime.

Si almaceno la hora por medio de ADO con un parámetro, me almacena la poniendole am o pm.

Ejemplo 04:00:00 p.m.

Si lo hago formado la instrucción como una cadena, me escribe la fecha más vieja del sistema y seguido la hora que coloque.

Ejemplo 01/01/1989 04:00:00 p.m.

Cuando quiero trabajar las horas es muy complicado, hacer compraciones, actualizaciones por medio de esa hora, etc.

Cual es la mejor forma de utilizar las horas tanto en la base de datos como en desarrollo?

Gracias por leer este mensaje y por sus comentarios.

Alexander.

Hola alexander,

el uso es el correcto y ademas con las funciones que incorpora SQL Server en T-SQL tienes un gran abanico de posibilidades. El problema es el formateo que le das a la salida (o lo que te muestra la aplicacion que uses para ver la tabla).Puede que sea la configuracion regional que tiene windows o el mismo servidor de sql (ahora mismo no puedo darte mas referencias sobre el tema, y puede que me equivoque al respecto).

Para trabajar implicitamente con la hora de un campo datetime en las consultas o en T-SQL tienes que usar la funcion datepart de SQL Server.(http://support.microsoft.com/kb/186265).

Varios ejemplos:

Para filtrar un tabla de eventos y saber que X que pasó a las 12:xx

Select * from eventos where datepart(h,fecha)=12

Para saber cuantos articulos se han vendido en franja horaria (revisando para ver si alguien habia contestado a esta pregunta me tope con esta otra que ilustro aqui para sql server).

Select datepart(h, fecha) as Hora, sum(importe) as Facturacion from lineasFac
group by datepart(h,fecha)

Para crear un agregado de cuantos eventos de cada tipo han sucedido a las 12:xx:
Select tipo_Evento, count(eventos.ID) from eventos where datepart(h,fecha)=12
group by tipo_Evento

lo mismo, pero diferente:

Select tipo_Evento, count(eventos.ID) from eventos
group by tipo_Evento
having datepart(h,fecha)=12

Para actualizar los eventos que ocurrieron a las 12 y marcarlos como revisados:

Update Eventos set revisado=1 where datepart(h,fecha)=12

Y ya por parte de delphi la libreria dateutils te ofrece todo lo que necesites para las fechas/horas:

-Extraccion de "porciones" o unidades de tiempo del datetime:
dateof / timeof / hourof / minuteof / etc...

-Comparacion:
samedatetime / sameDate / sameTime
compareDateTime / CompareDate / CompareTime

-Incremento/Decremento (+- segun precises sumar o restar la unidad de tiempo)
IncYear / IncMonth / IncWeek / IncDay / IncHour / IncMonth / etc...

Dateutils tiene mucha "miga". Dale un vistazo.

Espero que te sirva de ayuda.

Oscar Noe

Alexander 08-11-2006 15:07:17

Es lo que necesito
 
Oscar, Muchas gracias por la información, realmente me sirve y la empezaré a trabajar.

Hice unas pequeñas pruebas y funcionó. Y veo que las ayudas en este campo son más grandes de lo que pensaba.

Nuevamente muchas gracias.

Alexander


La franja horaria es GMT +2. Ahora son las 01:12:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi