SQL - queri de minutos trascurridos

   
Vista:
Imágen de perfil de Antonio

queri de minutos trascurridos

Publicado por Antonio antonio_dsanchez@hotmail.com (16 intervenciones) el 19/04/2017 16:13:51
hola a todos


tengo la siguiente consulta
1
2
3
4
5
6
7
select BELNR_ID,BELPOS_ID,DocDate,AUFTRAG,APLATZ_ID,
        CONVERT(VARCHAR(10),ANFZEIT,103) AS 'Fecha Inicio',
		RIGHT(ANFZEIT, 7) AS 'Hora Inicio',
		CONVERT(VARCHAR(10),ENDZEIT,103) AS 'Fecha Fin',
		RIGHT(ENDZEIT, 7) AS 'Hora fin',
		ABS(DATEDIFF(minute, RIGHT(ANFZEIT, 7), RIGHT(ENDZEIT, 7))) as 'MinutosTranscurridos',
		ZEIT,LEFT(APLATZ_ID,5) AS 'Maquina',LEFT(AUFTRAG,2) AS 'Turno' from BEAS_ARBZEIT


donde estoy ocupando

ABS(DATEDIFF(minute, RIGHT(ANFZEIT, 7), RIGHT(ENDZEIT, 7))) as 'MinutosTranscurridos'

ABS para convertir a positivo los datos y el DATEDIFF para sacar los minutos trascurridospero tengo un pequeño detalle.

cuando el rango es dentro del mismo dia durante las 24 horas si me manda el rango correcto de minutos transcurridos

pero cuando el rango habarca dos dias me manda un rato erroneo

ejemplos:

19/04/2017 1:00AM 19/04/2017 6:00AM 300 MIN "esto es ok"

18/04/2017 10:00PM 19/04/2017 1:00AM 1260 MIN "ESTO NO ESTA BIEN"
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

queri de minutos trascurridos

Publicado por leonardo_josue (985 intervenciones) el 19/04/2017 17:23:03
Hola Antonio:

¿Con qué motor de BD's estás trabajando? aunque la mayoría de ellos se basa en un SQL Estándar, hay diferencias sintácticas muy importantes entre cada uno de ellos, sobre todo en el manejo de fechas (cómo es el caso)

Adicionalmente, postea cual es la estructura de tu tabla, dinos de qué tipo son tus campos (porque sospecho que puedes estar guardando algunas fechas como VARCHAR) y pon algunos datos de ejemplo.

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
Imágen de perfil de Antonio

queri de minutos trascurridos

Publicado por Antonio (16 intervenciones) el 19/04/2017 18:52:48
es SQL estandar y las fechas son datetime

cambie el query por este:

1
2
3
4
5
6
7
8
9
10
11
DECLARE @ANFZEIT varchar(30)
DECLARE @ENDZEIT varchar(30)
SET @ANFZEIT = 'select ANFZEIT from BEAS_ARBZEIT';
SET @ENDZEIT = 'select ENDZEIT from BEAS_ARBZEIT';
select BELNR_ID,BELPOS_ID,DocDate,AUFTRAG,APLATZ_ID,
        CONVERT(VARCHAR(10),ANFZEIT,103) AS 'Fecha Inicio',
		RIGHT(ANFZEIT, 7) AS 'Hora Inicio',
		CONVERT(VARCHAR(10),ENDZEIT,103) AS 'Fecha Fin',
		RIGHT(ENDZEIT, 7) AS 'Hora fin',
		DATEDIFF(MINUTE,CAST(@ANFZEIT  as datetime),CAST(@ENDZEIT  as datetime)) as 'MinutosTranscurridos',
		ZEIT,LEFT(APLATZ_ID,5) AS 'Maquina',LEFT(AUFTRAG,2) AS 'Turno' from BEAS_ARBZEIT

pero me marca este error

La conversión falló al convertir la fecha y / o el tiempo de una cadena de caracteres.
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
Imágen de perfil de Isaias

queri de minutos trascurridos

Publicado por Isaias (933 intervenciones) el 19/04/2017 19:10:24
Tal vez suene a insistente, ¿Con que motor de base de datos?

Oracle
SQL Server
MySQL
Informix
DB2

¿Cual?
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
Imágen de perfil de Antonio

queri de minutos trascurridos

Publicado por Antonio (16 intervenciones) el 19/04/2017 21:50:09
sql server es el que estoy utilisando
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

queri de minutos trascurridos

Publicado por leonardo_josue (985 intervenciones) el 20/04/2017 16:44:31
Hola de nuevo Antonio:

Si tus campos son de tipo datetime, entonces no veo por qué razón estás haciendo tantas conversiones y particiones pudiendo utilizar directamente los campos, además, el error que mencionas creo que está más bien en la información: ejecuta esta consulta:

1
2
3
4
5
6
7
8
9
10
SELECT
  fecha1,
  fecha2,
  datediff(minute, fecha1, fecha2) diferencia
FROM
( SELECT '2017-04-19 01:00:00' fecha1, '2017-04-19 06:00:00' fecha2
  UNION
  SELECT '2017-04-18 22:00:00' fecha1, '2017-04-19 01:00:00' fecha2
  UNION
  SELECT '2017-04-18 22:00:00' fecha1, '2017-04-18 01:00:00' fecha2 ) T;
Aquí se obtienen los siguientes resultados:

1
2
3
4
5
6
7
8
9
+-------------------+-------------------+----------+
|fecha1             |fecha2             |diferencia|
+-------------------+-------------------+----------+
|2017-04-19 01:00:00|2017-04-19 06:00:00|       300|
+-------------------+-------------------+----------+
|2017-04-18 22:00:00|2017-04-19 01:00:00|       180|
+-------------------+-------------------+----------+
|2017-04-18 22:00:00|2017-04-18 01:00:00|     -1260|
+-------------------+-------------------+----------+

Por lo tanto creo que el supuesto "error" que dices es en realidad un error de datos, ocasionado con tantas conversiones que hace que no estés considerando el día correctamente para cada uno de los casos.

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