복붙노트

[SQL] SQL 서버, 분할 0을 반환

SQL

SQL 서버, 분할 0을 반환

여기에 내가 예에서 사용하고 코드입니다 :

 PRINT @set1
 PRINT @set2

 SET @weight= @set1 / @set2;
 PRINT @weight

여기에 결과는 다음과 같습니다

47
638
0

나는 그것이 0 대신 0,073667712을의 반환 왜 알고 싶습니다

해결법

  1. ==============================

    1.어느 선언 SET1 및 설정 2 대신 정수의 수레로 또는 계산의 일환으로 수레에 캐스팅 :

    어느 선언 SET1 및 설정 2 대신 정수의 수레로 또는 계산의 일환으로 수레에 캐스팅 :

    SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
    
  2. ==============================

    2.당신이 부문에서만 정수를 사용하면 분할 정수를 얻을 것이다. 당신은 두 번이나 플로트 (하나 이상)를 사용하면 포인트 부문 (그리고 당신이 얻고 싶은 답을) 떠납니다.

    당신이 부문에서만 정수를 사용하면 분할 정수를 얻을 것이다. 당신은 두 번이나 플로트 (하나 이상)를 사용하면 포인트 부문 (그리고 당신이 얻고 싶은 답을) 떠납니다.

    당신이 할 수있는 그래서

    다만 두 배로 정수 나누기의 결과를 캐스팅하지 : 소수점 뒤의 숫자가 이미 손실 있도록 부문은 이미 정수 나누기로 하였다.

  3. ==============================

    3.그것은 정수이기 때문. 당신은 계산 등으로 소수점 숫자 또는 소수, 또는 주조 부동로 선언해야합니다.

    그것은 정수이기 때문. 당신은 계산 등으로 소수점 숫자 또는 소수, 또는 주조 부동로 선언해야합니다.

  4. ==============================

    4.1.0에 의해 분할 단순히 다중 바닥 (또는 여러 소수점은 당신이 원하는대로)

    1.0에 의해 분할 단순히 다중 바닥 (또는 여러 소수점은 당신이 원하는대로)

    PRINT @set1 
    PRINT @set2 
    SET @weight= @set1 / @set2 *1.00000; 
    PRINT @weight
    
  5. ==============================

    5.당신은 플로트 또는 진수 형식으로 선언하는 경우가 표시됩니다

    당신은 플로트 또는 진수 형식으로 선언하는 경우가 표시됩니다

    예컨대 :

    declare @weight float;
    
    SET @weight= 47 / 638; PRINT @weight
    

    출력 : 0

    당신은 출력으로 원하는 경우

    예컨대

    declare @weight float;
    
    SET @weight= 47.000000000 / 638.000000000; PRINT @weight
    
  6. ==============================

    6.결과는 부동해야하는 경우에도 정수 두 개의 정수 반환 SQL 서버에 직접 부문에서. 그것을 통해 얻을 아래 예제가있다 :

    결과는 부동해야하는 경우에도 정수 두 개의 정수 반환 SQL 서버에 직접 부문에서. 그것을 통해 얻을 아래 예제가있다 :

    --1--
    declare @weird_number_float float
    set @weird_number_float=22/7
    select @weird_number_float
    
    --2--
    declare @weird_number_decimal decimal(18,10)
    set @weird_number_decimal=22/7 
    select @weird_number_decimal
    
    --3--
    declare @weird_number_numeric numeric
    set @weird_number_numeric=22/7 
    select @weird_number_numeric
    
    --Right way
    
    declare @weird_number float
    set @weird_number=cast(22 as float)/cast(7 as float)
    select @weird_number
    

    바로 지난 블록은 3,14285714285714를 반환합니다. 오른쪽 정확하게 정의 된 제 2 블록에도 불구하고 그 결과는 3.00000 될 것이다.

  7. from https://stackoverflow.com/questions/1666407/sql-server-division-returns-zero by cc-by-sa and MIT license