에서 온라인 설명서 :
POWER ( float_expression , y )
인수
float_expression float 형식 또는 float 로 암시 적으로 변환 할 수 있는 형식의 식 입니다.
이는 첫 번째 매개 변수로 전달한 모든 것이 함수가 실행 float(53)
되기 전에 암시 적으로 캐스트 될 것이라는 의미입니다 . 그러나 이것은 항상 그렇지는 않습니다 .
이 경우 정밀도의 손실을 설명합니다.
과학적 표기법을 사용하는 부동 소수점 값을 10 진수 또는 숫자로 변환하는 것은 정밀도 17 자리의 값으로 만 제한됩니다. 정밀도가 17보다 높은 모든 값은 0으로 반올림됩니다.
반면에 리터럴 2.
은 유형입니다 numeric
.
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
| (열 이름 없음) |
| : --------------- |
| 숫자 |
여기 dbfiddle
곱하기 연산자 는 우선 순위가 높은 인수의 데이터 유형을 반환합니다 .
2016 년 (SP1)에는 모든 정밀도가 유지되는 것으로 보입니다.
SELECT @@version;
GO
| (열 이름 없음) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
| Microsoft SQL Server 2016 (SP1) (KB3182545)-13.0.4001.0 (X64) <br> 2016 년 10 월 28 일 18:17:30 <br> 저작권 (c) Windows Server의 Microsoft Corporation <br> Express Edition (64 비트) 2012 R2 Standard 6.3 <X64> (빌드 9600 :) (하이퍼 바이저) <br> |
SELECT POWER(2.,64.);
GO
| (열 이름 없음) |
| : ------------------- |
| 18446744073709551616 |
여기 dbfiddle
…하지만 2014 년 (SP2)에는 다음이 아닙니다.
SELECT @@version;
GO
| (열 이름 없음) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
| Microsoft SQL Server 2014 (SP2) (KB3171021)-12.0.5000.0 (X64) <br> 2016 년 6 월 17 일 19:14:09 <br> 저작권 (c) Windows NT의 Microsoft Corporation <br> Express Edition (64 비트) 6.3 <X64> (빌드 9600 :) (하이퍼 바이저) <br> |
SELECT POWER(2.,64.);
GO
| (열 이름 없음) |
| : ------------------- |
| 18446744073709552000 |
여기 dbfiddle