programing

SQL Server : 식을 데이터 형식 int로 변환하는 동안 산술 오버플로 오류가 발생했습니다.

minimums 2023. 6. 22. 21:39
반응형

SQL Server : 식을 데이터 형식 int로 변환하는 동안 산술 오버플로 오류가 발생했습니다.

이 오류가 발생합니다.

msg 8115, 레벨 16, 상태 2, 라인 18
식을 데이터 형식 int로 변환하는 동안 산술 오버플로 오류가 발생했습니다.

이 SQL 조회를 사용하여

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   

문제가 있습니까?SUM(billableDuration)확인하려면 해당 줄에 주석을 달아보고 작동하는지 확인하십시오.

합이 최대값을 초과할 수 있습니다.int그렇다면 다음으로 교체해 보십시오.SUM(CAST(billableDuration AS BIGINT)).

매우 간단합니다.

Use COUNT_BIG(*) AS NumStreams

바꾸다SUM(billableDuration) AS NumSecondsDelivered로.

sum(cast(billableDuration as bigint))또는

sum(cast(billableDuration as numeric(12, 0)))필요에 따라

Sum 식의 결과 유형은 사용된 데이터 유형과 동일합니다.오버플로 시 오류가 발생합니다.따라서 열을 더 큰 용량의 데이터 유형에 캐스팅한 다음 Sum 연산을 사용하면 됩니다.

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

따옴표로 묶은 텍스트가 정확한 텍스트라고 가정하면 이 열 중 하나는 원하는 수학적 계산을 수행할 수 없습니다.오류를 두 번 클릭하면 문제의 원인이 되는 행이 강조 표시됩니다(게시된 내용과 다를 경우 위에 없을 수 있음).변수를 사용하여 코드를 테스트했는데 문제가 없었습니다. 즉, 이 열 중 하나(자세한 정보는 알 수 없음)가 이 오류를 생성하고 있습니다.

이것이 진행되려면 당신의 표현 중 하나가 int로 캐스팅/변환되어야 하는데, 이것은 다음의 의미입니다.Arithmetic overflow error converting expression to data type int.

제가 보기에 이 오류는 Null 값 열에 있는 데이터 유형 "INT"에서 발생했습니다.데이터 유형을 varchar로 변경하면 오류가 해결됩니다.

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

언급URL : https://stackoverflow.com/questions/15950580/sql-server-arithmetic-overflow-error-converting-expression-to-data-type-int

반응형