Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Hora en SQL Server

Estas en el tema de Hora en SQL Server en el foro de SQL Server en Foros del Web. Hola.. tengo un pequeño problema con una consulta, la cual me devuelve los campos de Folio, nombre, fecha, Entrada, Salida y Horas, todo va excelente, ...
  #1 (permalink)  
Antiguo 17/04/2011, 20:26
Avatar de azuer  
Fecha de Ingreso: abril-2011
Ubicación: Atizapan
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Hora en SQL Server

Hola.. tengo un pequeño problema con una consulta, la cual me devuelve los campos de Folio, nombre, fecha, Entrada, Salida y Horas, todo va excelente, pero me gustaria saber una forma de colocarle formato de "Horas" igual que el de Entrada y Salida he intentado pero no me keda :S...


espero me puedan ayudar y dar una explicadita....dejo mi codigo.. para ke lo cheken.. gracias.

Select *

from (

select T.*,cast(Salida as datetime)-cast(Entrada as DATETIME)

Horas from(

select Folio,Nombre +' '+ ApPat +' '+ ApMat Nombre,

dbo.FormatDateTime(fecha,'DD/MM/YYYY') fecha,

dbo.FormatDateTime(Hora,'HH:MM:SS 24') ENTRADA,

(Select dbo.FormatDateTime(Hora,'HH:MM:SS 24') from Chequeo
where IdEvento =2 and Fecha=ch.fecha and idalumn=ch.idalumn)SALIDA

from dbo.Chequeo ch inner join dbo.DatosPersonales dp
on (dp.idalumn=ch.idalumn)
where IdEvento =1

) as T
) as T2
  #2 (permalink)  
Antiguo 18/04/2011, 09:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Hora en SQL Server

No me queda claro, porque haces SUB-CONSULTAS, pudiendo hacerlo todo en un solo SELECT.

Para dar "formato" a tus fechas (esto debe hacerlo la capa cliente), tienes el CAST o CONVERT con 108, si no mal recuerdo

SELECT CONVERT(CHAR(5), GETDATE(), 108)
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 18/04/2011, 17:36
Avatar de azuer  
Fecha de Ingreso: abril-2011
Ubicación: Atizapan
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Respuesta: Hora en SQL Server

MUCHAS GRACIAS AMIGO.

PERO...

HE ESTADO CHECANDO LO KE ME PUSISTE Y LA VERDAD ES BUENO, PERO APARTE DE KE NO LO SE USAR, SIGO COMO MENCIONE.. NO SE DONDE COLOCARLO (POR LO MISMO :s CREO YO :s)...

ES COMO ESTE CODIGO

select dbo.FormatDateTime(Hora,'HH:MM:SS 24') Hora from Chequeo


HACE LO KE NECESITO PERO NO ENCUENTRO LA FORMA DE COLOCARLO :s .
  #4 (permalink)  
Antiguo 18/04/2011, 23:57
Avatar de azuer  
Fecha de Ingreso: abril-2011
Ubicación: Atizapan
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Hora en SQL Server

Muy bien Checa esto... es lo ke me devuelve ....

Folio Nombre Fecha ENTRADA SALIDA Horas

512 EVERARDO MEZA RAMOS 05/04/2011 10:23:35 13:54:19 1900-01-01 03:30:44.000
512 EVERARDO MEZA RAMOS 06/04/2011 10:05:49 14:24:06 1900-01-01 04:18:17.000
512 EVERARDO MEZA RAMOS 07/04/2011 09:59:28 NULL NULL
512 EVERARDO MEZA RAMOS 08/04/2011 09:53:28 13:59:42 1900-01-01 04:06:14.000
512 EVERARDO MEZA RAMOS 11/04/2011 09:55:06 13:53:53 1900-01-01 03:58:47.000
512 EVERARDO MEZA RAMOS 12/04/2011 10:02:30 14:07:47 1900-01-01 04:05:17.000
512 EVERARDO MEZA RAMOS 13/04/2011 10:00:28 13:59:42 1900-01-01 03:59:14.000
512 EVERARDO MEZA RAMOS 14/04/2011 10:03:26 14:07:09 1900-01-01 04:03:43.000

Pero en el campo de "Horas" no kiero ke me salga "1900-01-01" pues solo kiero las horas ke serian por ejemplo "03:30:44.000"

Anteriormente deje un select, bueno ya lo kite haber como va porke la verdad no se como hacerlo:

select T.*,cast(Salida as datetime)-cast(Entrada as DATETIME)

Horas from(

select Folio,alNombre +' '+ alApPat +' '+ alApMat Nombre,

dbo.FormatDateTime(fecha,'DD/MM/YYYY') fecha,
dbo.FormatDateTime(Hora,'HH:MM:SS 24') ENTRADA,

(Select dbo.FormatDateTime(Hora,'HH:MM:SS 24') from Chequeo
where IdEvento =2 and Fecha=ch.fecha and idalumn=ch.idalumn)SALIDA

from dbo.Chequeo ch inner join dbo.DatosPersonales dp
on (dp.idalumn=ch.idalumn)
where IdEvento =1

) as T

Nota: Me he dado cuenta ke "SELECT CONVERT(VARCHAR(8), GETDATE(), 108) " al parecer toma la hora del sistema, no kiero ke cambie las horas ke tengo, solo ke las muestre con el formato ke yo kiero.

espero me puedan ayudar ... Gracias.
  #5 (permalink)  
Antiguo 19/04/2011, 08:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hora en SQL Server

Hola azuer:

A ver, vamos por partes,

En primer lugar deberías comenzar por decirnos de qué tipo es tu columna HORA, ya que de ahí dependerá las conversiones que tengas que hacer.

Segundo, no recuerdo que SQL Server tenga una función dbo.FormatDateTime, así es que puedo suponer que se trata de alguna función de usuario, es decir que tú la creaste. Si no tenemos el código de esa función, pues será muy difícil sino que imposible tratar de ayudarte.

Cita:
Nota: Me he dado cuenta ke "SELECT CONVERT(VARCHAR(8), GETDATE(), 108) " al parecer toma la hora del sistema, no kiero ke cambie las horas ke tengo, solo ke las muestre con el formato ke yo kiero.
Esto es sólo un ejemplo de lo que debes hacer, si hubieras leído un poco sabrías que getdate() te regresa la hora y la fecha actual, lo único que deberías hacer es reemplazar este función por tu campo y listo,

suponiendo que tu campo HORA sea de tipo datetime entonces debería quedar más o menos así:

Código:
CONVERT(varchar(8), Hora, 108) ENTRADA,

(Select CONVERT(varchar(8), Hora, 108) from Chequeo 
where IdEvento =2 and Fecha=ch.fecha and idalumn=ch.idalumn) SALIDA
Saludos.
Leo.
  #6 (permalink)  
Antiguo 19/04/2011, 13:07
Avatar de azuer  
Fecha de Ingreso: abril-2011
Ubicación: Atizapan
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Hora en SQL Server

jiji Excelente .... No digas --Lo ke me gusta de esto es ke Siempre aprendes algo nuevo :D ---

Antes de continuar les doy las gracias por brindarme un poco de su tiempo.

-Muy bien aki esta tal y como indicas (leonardo_josue):

************************************************** ******************

Select *, CONVERT(varchar(8), Horas1, 108) Horas2

from (

select T.*,cast(Salida as datetime)-cast(Entrada as DATETIME)

Horas1 from(

select Folio,alNombre +' '+ alApPat +' '+ alApMat Nombre,

CONVERT(varchar(10), fecha, 111) fecha,
CONVERT(varchar(8), Hora, 108) ENTRADA,

(Select CONVERT(varchar(8), Hora, 108) from Chequeo
where IdEvento =2 and Fecha=ch.fecha and idalumn=ch.idalumn)SALIDA

from dbo.Chequeo ch inner join dbo.DatosPersonales dp
on (dp.idalumn=ch.idalumn)
where IdEvento =1

) as T
) as T2


************************************************** ********************

Mira si te das cuenta, (que gracias a ti yo me di cuenta) . CONVERT(varchar(8), Hora, 108) es lo mismo ke mi funcion, de echo le agregue "CONVERT(varchar(8), Horas1, 108) Horas2" ...con la cual me devuelve los datos ke antes mencione, mas la columna "Horas2" con el formato ke necesito :
**********************
Horas2

03:30:44
04:18:17
04:06:14
03:58:47
04:05:17
03:59:14
04:03:43

************************
Pero lo ke realmente quiero es ke me la culumna "Horas1" me devuelva los datos en el formato ke tiene "Horas2" ..... no se ke hacer, o donde colocar "CONVERT" si es el caso.
  #7 (permalink)  
Antiguo 19/04/2011, 14:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Hora en SQL Server

Peco de necio, ¿porque utilizar sub-consultas?
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 19/04/2011, 14:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hora en SQL Server

Hola de nuevo compañero azuer... creo que no terminas de entender cuando es necesario aplicar una conversión y cuando no. Si tu problema es al momento de presentar la información, entonces TIENES QUE APLICAR LAS CONVERSIONES HASTA EL FINAL, o en tu caso en el SELECT EXTERIOR, en el Select interno no tienes caso que hagas conversiones, es más, no es conveniente porque estás realizando operaciones con fechas y para obtener el campo hora1 estás convirtiendo nuevamente a fecha. Prueba con esto:

Código SQL:
Ver original
  1. SELECT T.*, CONVERT( VARCHAR(8), Salida - Entrada, 108) Horas1 FROM(
  2. Hora ENTRADA,
  3. (SELECT Hora FROM Chequeo
  4. WHERE IdEvento =2 AND Fecha=ch.fecha AND idalumn=ch.idalumn) SALIDA
  5. FROM dbo.Chequeo ch INNER JOIN dbo.DatosPersonales dp
  6. ON (dp.idalumn=ch.idalumn)
  7. WHERE IdEvento =1
  8. ) AS T

Si observas no hago ninguna conversión a los campos ENTRADA y SALIDA, la conversión la aplico al resultado de restar ambas fechas. No le veo ningún sentido al último select (el externo), pero es cuestión que pruebes y nos comentes.

Saludos
Leo.
  #9 (permalink)  
Antiguo 19/04/2011, 14:28
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Hora en SQL Server

Ademas de que TODAS LAS CONVERSIONES (maquillaje), deberian hacerse en la capa cliente.
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 19/04/2011, 17:38
Avatar de azuer  
Fecha de Ingreso: abril-2011
Ubicación: Atizapan
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Hora en SQL Server

haaaay ya me desespere y solo me salio esto :

select T.*,Convert( varchar(8), Salida - Entrada, 108) Horas
from(
select FolioSae,alNombre +' '+ alApPat +' '+ alApMat Nombre,
fecha, dbo.FormatDateTime(Hora,'HH:MM:SS 24') ENTRADA,
(SELECT Hora from ServSocChequeo
where IdEvento =2 and Fecha=ssc.fecha and idalumn=ssc.idalumn) SALIDA
from dbo.ServSocChequeo ssc inner join dbo.ServSocAlDatosPersonales ssdp
on (ssdp.idalumn=ssc.idalumn) where IdEvento =1
) as T

donde me devuelve lo ke kiero en la cumna "Horas" pero ahora me dejo "fecha" y SALIDA en este formato : "2011-04-05 00:00:00.000" "1899-12-30 13:54:19.000" y ENTRADA solo pude darle formato con la Funcion "dbo.FormatDateTime" :S .....


Sin envargo agradesco mucho su comprencion, y por lo mismo sigo al pie del cañon intentando y buscando como hacerle, utilizando la informacion ke me han regalado... mas tarde informare como va mi avance.
  #11 (permalink)  
Antiguo 20/04/2011, 09:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hora en SQL Server

Hola de nuevo azuer:

Estoy seguro que algunos de nosotros también han comenzado a desesperarse, pues no aplicas nada de lo que tratamos de explicarte. Tal pareciera que estás esperando una respuesta sólo para copiar y pegar y que funcione tal y como lo necesitas. Eso difícilmente va a suceder, la mayoría de las veces vas a tener que hacer algún tipo de adecuación del código que aquí te ponemos para aplicarlo a tu problema real. Ya te había comentado que el formato de los datos para presentarlos al usuario debes hacerlo en el ULTIMO SELECT O SELECT EXTERNO (o tal como lo comentó el compañero Iislas en la capa del Cliente), pero parece que no terminas de entender cómo hacer esto. A partir de la última consulta que pones:

Código SQL:
Ver original
  1. SELECT T.*,CONVERT( VARCHAR(8), Salida - Entrada, 108) Horas
  2. FROM(
  3. SELECT FolioSae,alNombre +' '+ alApPat +' '+ alApMat Nombre,
  4. fecha, dbo.FormatDateTime(Hora,'HH:MM:SS 24') ENTRADA,
  5. (SELECT Hora FROM ServSocChequeo
  6. WHERE IdEvento =2 AND Fecha=ssc.fecha AND idalumn=ssc.idalumn) SALIDA
  7. FROM dbo.ServSocChequeo ssc INNER JOIN dbo.ServSocAlDatosPersonales ssdp
  8. ON (ssdp.idalumn=ssc.idalumn) WHERE IdEvento =1
  9. ) AS T

dices que FECHA y SALIDA no tienen el formato que quieres, PUES ENTONCES APLICA DICHO FORMATO EN EL SELECT EXTERNO:

Código SQL:
Ver original
  1. SELECT
  2. T.Nombre,
  3. CONVERT(VARCHAR(10), T.fecha, 103) fecha, --> formato dd/mm/yyyy
  4. CONVERT(VARCHAR(10), T.ENTRADA, 108) ENTRADA, --> formato hh24:mi:ss
  5. CONVERT(VARCHAR(10), T.SALIDA, 108) SALIDA, --> formato hh24:mi:ss
  6. CONVERT( VARCHAR(8), T.SALIDA - T.ENTRADA, 108) Horas --> formato hh24:mi:ss
  7. FROM(
  8. SELECT FolioSae,alNombre +' '+ alApPat +' '+ alApMat Nombre,
  9. fecha, Hora ENTRADA,
  10. (SELECT Hora FROM ServSocChequeo
  11. WHERE IdEvento =2 AND Fecha=ssc.fecha AND idalumn=ssc.idalumn) SALIDA
  12. FROM dbo.ServSocChequeo ssc INNER JOIN dbo.ServSocAlDatosPersonales ssdp
  13. ON (ssdp.idalumn=ssc.idalumn) WHERE IdEvento =1
  14. ) AS T

Puedes observar que en el select interno NO SE APLICA NINGUNA CONVERSIÓN, porque no es necesario. Si de plano esto no te ayuda, creo que será conveniente que busques ayuda en algún otro foro o que algún otro forista trate de ayudarte, pues no encuentro otra manera de explicarme.

Saludos
Leo.

Etiquetas: server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:17.