Целочисленное деление в SQL-сервере

В Microsoft SQL Server 2005, почему следующие команды приводят к целочисленным результатам?

SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
41
задан Phillip Senn 9 August 2010 в 19:56
поделиться

4 ответа

Сначала вы получаете результат двух целых чисел, а затем преобразовываете результат в DECIMAL (9,2). Во втором случае вы просто делите два целых числа, и это ожидаемо.

Если вы приведете одно из целых чисел как десятичное ПЕРЕД вы сделаете деление, вы получите десятичный результат.

SELECT 151/CAST(6 AS DECIMAL (9,2))
45
ответ дан 27 November 2019 в 00:25
поделиться

Да, это стандартное поведение

do

SELECT 151/6.0

или

SELECT 151/(CONVERT(DECIMAL(9,2),6))

или

SELECT 151/(6 * 1.0)
33
ответ дан 27 November 2019 в 00:25
поделиться

Поскольку 151 и 6 - целые числа, и вы выполняете целочисленное деление, даже до приведения.

Вам нужно убедиться, что хотя бы один из аргументов является типом float:

SELECT 151.0/6

Or

SELECT 151/6.0
9
ответ дан 27 November 2019 в 00:25
поделиться

По той же причине, что и в c#, ​​java и других основных языках.

Целочисленная арифметика, CAST после математики...

1
ответ дан 27 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

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