IT

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

itgroup 2023. 4. 23. 10:16
반응형

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

T-SQL과 Microsoft SQL Server를 사용하여 다음과 같이 두 정수 사이를 나눌 때 십진수를 지정합니다.

select 1/3

그것은 현재 반환되고 있다.0반품해 주셨으면 합니다.0,33.

예를 들어 다음과 같습니다.

select round(1/3, -2)

하지만 그건 효과가 없어.원하는 결과를 얻으려면 어떻게 해야 하나요?

상수를 찾고 있다면 stb와 xiowl의 제안도 좋습니다.기존 필드 또는 정수 파라미터를 사용해야 하는 경우 먼저 플로트로 캐스팅할 수 있습니다.

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

또는

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

SQL Server가 정수 분할을 수행하기 때문입니다.이것을 시험해 보세요.

select 1 * 1.0 / 3

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

select x * 1.0 / y

둘 다 캐스팅할 필요는 없어요.분할의 결과 데이터 유형은 항상 데이터 유형의 우선 순위가 높은 데이터 유형입니다.따라서 해결책은 다음과 같습니다.

SELECT CAST(1 AS float) / 3

또는

SELECT 1 / CAST(3 AS float)

사용하다

select 1/3.0

이것으로 충분할 것이다.

이해는 합니다.CAST에 주입하는.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.

할 수 있다CASTbinary, char, date, datetime, 10진수, json, nchar, signed, timeunsigned 유형으로 지정합니다.

이 트릭은 SQL Server에서 사용할 수 있고 더 짧습니다(이전 답변 참조).

SELECT 1.0*MyInt1/MyInt2

또는 다음 중 하나를 선택합니다.

SELECT (1.0*MyInt1)/MyInt2

이것을 사용하다

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

이 sql에서는 먼저 float 또는 1.00으로 변환합니다.플로트 번호가 되는 출력.여기서는 소수점 두 자리를 고려하겠습니다.필요한 것은 선택하실 수 있습니다.

(저와 마찬가지로) 정수값의 솔루션을 찾기 위해 여기에 왔다면, 다음과 같은 답이 있습니다.

CAST(9/2 AS UNSIGNED)

5를 반환하다

보고 깜짝 놀랐어요select 0.7/0.9돌아오는0.8Teradata에서는 이미 부동수/10진수입니다!해야만 했다cast(0.7 as float)내가 원하는 결과를 얻기 위해서요

리터럴을 사용하는 경우 SQL에 어떤 유형을 "알리는" 것이 가장 좋습니다.

소수점 결과를 원할 경우 숫자에 소수점 ".0"을 추가합니다.

SELECT 1.0 / 3.0
결과
0.333333

부동(실제) 결과를 원하는 경우, 숫자에 "e0"을 추가합니다.

SELECT 1e0 / 3e0
결과
0.333333333333333

언급URL : https://stackoverflow.com/questions/11719044/how-to-get-a-float-result-by-dividing-two-integer-values-using-t-sql

반응형