@180Ringing

Ошибка арифметического переполнения SQL SERVER. Почему такое поведение?

Может довольно простой вопрос.
Но хотелось бы узнать механизм работы.
Почему
SELECT 2000000000 * 3 
--Ошибка арифметического переполнения при преобразовании expression к типу данных int.

SELECT 3000000000 * 3  
-- 9000000000


Если создать вью

create view ts
as 

SELECT 2000000000 * 3 AS A, 3000000000 * 3  AS B

, то в типах данных увидим такое
5b6ac47caf1c0980349547.jpeg
  • Вопрос задан
  • 8971 просмотр
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Так происходит потому что 2000000000 еще помещается в int, а вот 3000000000 уже нет.
https://docs.microsoft.com/ru-ru/sql/t-sql/data-ty...
int от -2^31 (-2 147 483 648) до 2^31-1 (2 147 483 647)

Если нужно чтобы ничего не рушилось можно вот так сделать:

SELECT 2000000000.0 * 3 AS A, 3000000000.0 * 3 AS B
При таком вариант уже будет float
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы