es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de Azure ADF: Error de desbordamiento aritmético al convertir la expresión en el tipo de datos int.

Estoy trabajando con Azure ADF y tengo problemas cuando ejecuto esta consulta en Azure ADF:

SELECT COUNT(*) AS c
FROM TABLE 
WHERE CONVERT(date, (FORMAT(DATEADD(second, CONVERT(bigint, TS) / 1000, ''19700101'), ''yyyy-MM-dd'))) = CONVERT(Date, GETDATE())

La salida es un error:

Desbordamiento aritmético

Pero si cambio el = a >=, la consulta funciona y devuelve un resultado.

El TS es un UNIXTIMESTAMP como 1637680012264.

Usar la combinación de >= y < no es adecuado porque estoy tratando con días no contiguos (necesito usar WHERE TS IN (date1, date2, etc...)).

¿Alguien podría ayudarme? Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error está ocurriendo porque la parte de la consulta CONVERT(bigint, TS) está causando un desbordamiento aritmético. Esto puede ser porque el valor de TS es mayor que el valor máximo para bigint, o porque es negativo y no puede ser convertido a un valor sin signo.

    Una solución podría ser utilizar un método diferente para convertir la marca temporal de UNIX a una fecha. Una opción es utilizar la función DATEADD para sumar el número de segundos desde la época de Unix (01/01/1970) a esa fecha, como se muestra a continuación:

    SELECT COUNT(*) AS c
    FROM TABLE 
    WHERE CONVERT(date, DATEADD(second, CONVERT(bigint, TS) / 1000, '19700101')) = CONVERT(Date, GETDATE())
    

    Esto debería darte los mismos resultados que la consulta original, pero sin el error de desbordamiento aritmético.

    Alternativamente, puedes intentar utilizar un tipo de datos diferente para TS que pueda manejar valores más grandes o negativos, dependiendo de tus datos. También podrías considerar dividir tu cláusula WHERE en múltiples condiciones basadas en un rango de fechas, en lugar de intentar utilizar IN con fechas no contiguas.

Comments are closed.