none
Consulta no me devuelve valores RRS feed

  • Pregunta

  • tengo la siguiente consulta para consultar diferencia de minutos entre dos tablas y no me devuelve ningun dato

    SELECT  ChTime,HoraSalida, DATEDIFF(MINUTE,cast(ChTime as time(7)),HoraSalida)  as [diferencia]
    FROM            dbo.Checador INNER JOIN Horario ON Checador.Id = Horario.Id

    viernes, 24 de junio de 2016 18:54

Respuestas

  • Ariel _Diaz,

    Al parecer sigues intentando combinar de la forma:

    ON Checador.ChTime = Horario.HoraSalida

    Y ya te mencione que no es correcto y por ello obtienes el error y que además no tiene sentido generar igualdad cuando lo que deseas es obtener la diferencia de tiempos. 

    ¿Es posible que puedas mostrarnos la estructura de ambas tablas para ver si existe forma de combinarlas?

    • Marcado como respuesta José De Alva jueves, 30 de junio de 2016 14:45
    lunes, 27 de junio de 2016 18:00

Todas las respuestas

  • Ariel _Diaz,

    ¿Qué tipo es la columna [ChTime]? Si es un tipo que permite valores alfanuméricos, ¿puedes poner un ejemplo de la forma como almacenas dichos valores (formato)?.

    viernes, 24 de junio de 2016 19:01
  • Es tipo "datetime" por eso utilizo el "cast" para convertirlo a "time(7)" que es el tipo de la columa "HoraSalida"
    viernes, 24 de junio de 2016 19:05
  • Ariel _Diaz,

    Pues no veo nada incorrecto, ¿obtienes valores para las dos primeras columnas del SELECT?, lo menciono porque es probable que la combinación (INNER JOIN) no esté generando filas.

    Fíjate que lo que haces no es incorrecto:

    DECLARE @FechaEntrada datetime = GETDATE();
    DECLARE @HoraSalida time(7) = '15:08:12';
    SELECT DATEDIFF(MINUTE, CONVERT(time(7), @FechaEntrada), @HoraSalida);

    • Propuesto como respuesta José De Alva jueves, 30 de junio de 2016 14:45
    viernes, 24 de junio de 2016 19:13
  • de hecho en las primeras dos columnas del SELECT tampoco obtengo valores
    viernes, 24 de junio de 2016 19:29
  • ok encontré el error en el inner join, ahora me aparece el siguiente error:

    "Los tipos de datos datetime2 y time son incompatibles con el operador equal to."

    viernes, 24 de junio de 2016 19:44
  • Ariel _Diaz,

    Vamos, entonces no es un problema de la función DATEDIFF() ni de los argumentos que envías, si no obtienes resultados es porque la tabla [Horario] no tiene filas que intersecten con la tabla [Checador].

    Nota que la expresión condicional para la combinación la haces -aparentemente- con las columnas PK  de cada tabla, eso no es correcto, la combinación se hace -generalmente- entre una PK y FK (ambas conteniendo valores en común), algo como lo siguiente:

    FROM            
    	dbo.Checador 
    	INNER JOIN Horario ON Checador.Id = Horario.IdChecador

    Nota que la tabla [Checador] combina filas con la tabla [Horario] por la columna FK ()

    viernes, 24 de junio de 2016 19:45
  • Ariel _Diaz,

    ¿Puedes mostrar el código que tienes?

    viernes, 24 de junio de 2016 19:47
  • SELECT  ChTime,HoraSalida, DATEDIFF(MINUTE,CONVERT(time(7),ChTime),HoraSalida)  as [diferencia]
    FROM            dbo.Checador INNER JOIN Horario ON Checador.ChTime = Horario.HoraSalida
    viernes, 24 de junio de 2016 19:51
  • Pero el mensaje de error te dice que no es correcto la igualdad que intentas realizar, pero fíjate que a si fuese correcto sintacticamente, no tiene sentido combinar filas igualando valores si en la lidta de selección muestras la diferencia en minutos, siempre obtendrás 0. 

    La tabla horario no tiene una columna FK que referencia a la tabla Checador?

    viernes, 24 de junio de 2016 20:02
  • de hecho no tiene ninguna referencia.

    viernes, 24 de junio de 2016 21:01
  • Ariel _Diaz,

    Si no existe una relación entre ambas tablas no es posible obtener filas basadas en un campo en común, quizá puedas obtener filas basadas en alguna coincidencia, ¿puedes mostrar la estructura (columnas) de ambas tablas?

    viernes, 24 de junio de 2016 21:32
  • ahora tengo este error "Los tipos de datos datetime2 y time son incompatibles con el operador equal to." 

    lunes, 27 de junio de 2016 17:14
  • Ariel _Diaz,

    Al parecer sigues intentando combinar de la forma:

    ON Checador.ChTime = Horario.HoraSalida

    Y ya te mencione que no es correcto y por ello obtienes el error y que además no tiene sentido generar igualdad cuando lo que deseas es obtener la diferencia de tiempos. 

    ¿Es posible que puedas mostrarnos la estructura de ambas tablas para ver si existe forma de combinarlas?

    • Marcado como respuesta José De Alva jueves, 30 de junio de 2016 14:45
    lunes, 27 de junio de 2016 18:00