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.
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 deTS
es mayor que el valor máximo parabigint
, 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: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áusulaWHERE
en múltiples condiciones basadas en un rango de fechas, en lugar de intentar utilizarIN
con fechas no contiguas.