SQL Server : Arithmetic overflow error converting expression to data type int

SqlSql ServerTsql

Sql Problem Overview


I'm getting this error

> msg 8115, level 16, state 2, line 18
> Arithmetic overflow error converting expression to data type int.

with this SQL query

DECLARE @year VARCHAR(4);						
DECLARE @month VARCHAR(2);						
						
-- START OF CONFIGURATION SECTION						
-- THIS IS THE ONLY SECTION THAT SHOULD BE MODIFIED						
-- SET THE YEAR AND MONTH PARAMETERS						
						
SET @year = '2013';						
SET @month = '3';  -- 1 = January.... 12 = Decemeber.						
						
-- END OF CONFIGURATION SECTION						
						
DECLARE @startDate DATE						
DECLARE @endDate DATE						
SET @startDate = @year + '-' + @month + '-01 00:00:00';						
SET @endDate = DATEADD(MONTH, 1, @startDate);						
						
SELECT  						
    DATEPART(YEAR, dateTimeStamp) AS [Year] 						
    , DATEPART(MONTH, dateTimeStamp) AS [Month] 						
    , COUNT(*) AS NumStreams 						
    , [platform] AS [Platform] 						
    , deliverableName AS [Deliverable Name]						
    , SUM(billableDuration) AS NumSecondsDelivered 						
FROM    						
    DeliveryTransactions 						
WHERE   						
    dateTimeStamp >= @startDate						
AND dateTimeStamp < @endDate						
GROUP BY    						
    DATEPART(YEAR, dateTimeStamp) 						
    , DATEPART(MONTH, dateTimeStamp) 						
    , [platform]						
    , deliverableName						
ORDER BY    						
    [platform] 						
    , DATEPART(YEAR, dateTimeStamp) 						
    , DATEPART(MONTH, dateTimeStamp) 						
    , deliverableName	

Sql Solutions


Solution 1 - Sql

Is the problem with SUM(billableDuration)? To find out, try commenting out that line and see if it works.

It could be that the sum is exceeding the maximum int. If so, try replacing it with SUM(CAST(billableDuration AS BIGINT)).

Solution 2 - Sql

Very simple:

Use COUNT_BIG(*) AS NumStreams

Solution 3 - Sql

Change SUM(billableDuration) AS NumSecondsDelivered to

sum(cast(billableDuration as bigint)) or

sum(cast(billableDuration as numeric(12, 0))) according to your need.

The resultant type of of Sum expression is the same as the data type used. It throws error at time of overflow. So casting the column to larger capacity data type and then using Sum operation works fine.

Solution 4 - Sql

SELECT                          
    DATEPART(YEAR, dateTimeStamp) AS [Year]                         
    , DATEPART(MONTH, dateTimeStamp) AS [Month]                         
    , COUNT(*) AS NumStreams                        
    , [platform] AS [Platform]                      
    , deliverableName AS [Deliverable Name]                     
    , SUM(billableDuration) AS NumSecondsDelivered

Assuming that your quoted text is the exact text, one of these columns can't do the mathematical calculations that you want. Double click on the error and it will highlight the line that's causing the problems (if it's different than what's posted, it may not be up there); I tested your code with the variables and there was no problem, meaning that one of these columns (which we don't know more specific information about) is creating this error.

One of your expressions needs to be casted/converted to an int in order for this to go through, which is the meaning of Arithmetic overflow error converting expression to data type int.

Solution 5 - Sql

On my side, this error came from the data type "INT' in the Null values column. The error is resolved by just changing the data a type to varchar.

Solution 6 - Sql

declare @d real
set @d=1.0;
select @d*40000*(192+2)*20000+150000

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser2270544View Question on Stackoverflow
Solution 1 - SqlJeff JohnstonView Answer on Stackoverflow
Solution 2 - SqlJohn GView Answer on Stackoverflow
Solution 3 - SqlFaiyazView Answer on Stackoverflow
Solution 4 - SqlQuestion3CPOView Answer on Stackoverflow
Solution 5 - SqlJohn TecleView Answer on Stackoverflow
Solution 6 - Sqluser7344470View Answer on Stackoverflow