T-SQL을 사용하여 두 개의 정수 값을 나누어 부동 소수점 결과를 얻는 방법은 무엇입니까?


173

T-SQL과 Microsoft SQL Server를 사용하여 다음과 같이 두 정수 사이의 나누기를 할 때 소수 자릿수를 지정하고 싶습니다.

select 1/3

현재를 반환합니다 0. 나는 그것을 반환하고 싶습니다 0,33.

다음과 같은 것 :

select round(1/3, -2)

그러나 그것은 작동하지 않습니다. 원하는 결과를 얻으려면 어떻게해야합니까?


3
1.0 / 3을 사용해 보셨습니까?
Thilo

내가 얻은 답변은 충분합니다
LaBracca

답변:


277

상수를 찾고 있다면 stb와 xiowl의 제안이 좋습니다. 정수인 기존 필드 또는 매개 변수를 사용해야하는 경우 먼저 부동 소수점으로 캐스트 할 수 있습니다.

SELECT CAST(1 AS float) / CAST(3 AS float)

또는

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

또는 소수 결과를 원할 경우 소수로 캐스트 할 수 있습니다.
Tim

30
선택 1.0 * MyInt1 / MyInt2
Troglo

MySQL 용 decimal
@TroubleZero

고마워, 당신은 내 하루를 구했다. 나는 CAST (7/3 AS float)를 시도했지만 2를 다시 반환했습니다. 따라서 캐스트 번호는 내 문제를 해결합니다.
Yasin Yörük

3
배당과 제수를 모두 캐스팅 할 필요가 없습니다. @
MS

70

SQL Server는 정수 나누기를 수행하기 때문입니다. 이 시도:

select 1 * 1.0 / 3

이것은 정수를 매개 변수로 전달할 때 유용합니다.

select x * 1.0 / y

1
당신은 0을 생략 할 수 있습니다.
John

43

둘 다 캐스팅 할 필요는 없습니다. 디비전의 결과 데이터 유형은 항상 데이터 유형 우선 순위 가 더 높은 유형 입니다. 따라서 솔루션은 다음과 같아야합니다.

SELECT CAST(1 AS float) / 3

또는

SELECT 1 / CAST(3 AS float)

27

사용하다

select 1/3.0

이것은 일을 할 것입니다.


13

나는 이해 CAST하기 위해 ING FLOATMySQL은 허용되지 않으며 당신이 시도 할 때 오류가 발생합니다 CAST(1 AS float)에서 언급 한 바와 같이 MySQL의 DEV .

이에 대한 해결 방법은 간단합니다. 그냥 해

(1 + 0.0)

그런 다음을 사용 ROUND하여 다음 과 같은 특정 소수점 이하 자릿수를 얻습니다.

ROUND((1+0.0)/(2+0.0), 3)

위의 SQL은 1을 2로 나누고 부동 소수점을 소수점 3 자리로 반환합니다 0.500.

한 캔 CAST: 다음과 같은 유형의 진수, 문자, 날짜, 날짜, 소수, JSON, NCHAR, 서명, 시간, 그리고 부호 .


3
MySQL은 허용 CAST하지만 캐스팅은 허용하지 않습니다 FLOAT. DECIMAL대신 캐스트하십시오 . 예를 들어 stackoverflow.com/questions/7368163/…을 참조하십시오 .
markusk

7

이 트릭은 SQL Server에서 작동하고 더 짧습니다 (이전 답변을 기반으로 함)

SELECT 1.0*MyInt1/MyInt2

또는:

SELECT (1.0*MyInt1)/MyInt2

2
나는 이것을 가장 좋아했고, 심지어 백분율 계산에도 좋습니다.SELECT 100.0 * @Elapsed / @Total
EliSherer

3

이것을 사용하십시오

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

여기이 sql에서 먼저 float로 변환하거나 1.00을 곱하십시오. 출력은 float 숫자입니다. 여기서 소수점 이하 두 자리를 고려하십시오. 필요한 것을 선택할 수 있습니다.


2

integer value에 대한 솔루션을 찾기 위해 (나와 같이) 여기에왔다면 답은 다음과 같습니다.

CAST(9/2 AS UNSIGNED)

5를 반환

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.