Подтвердить что ты не робот

Целочисленное разделение на сервере sql

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

SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
4b9b3361

Ответ 1

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

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

SELECT 151/CAST(6 AS DECIMAL (9,2))

Ответ 2

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

do

SELECT 151/6.0

или

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

или

SELECT 151/(6 * 1.0)

Ответ 3

Так как 151 и 6 являются целыми числами, и вы выполняете целочисленное деление, даже перед литой.

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

SELECT 151.0/6

или

SELECT 151/6.0

Ответ 4

Не прямой ответ на ваш вопрос. Еще стоит взглянуть на Операторы в выражениях, если вам это нужно в SSRS

/ Делит два числа и возвращает результат с плавающей запятой.

\ Делит два числа и возвращает результат целочисленный.

Мод Возвращает целочисленный остаток деления.

Ответ 5

Вам также нужно указать место для десятичных знаков

Пример

SELECT 151.000000/6
OR
SELECT 151/6.000000

Оба будут производить

25.16666666

Ответ 6

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

Integer 'rithmatic, CAST после математики...

Ответ 7

Попробуйте следующее:

SELECT 1.0*cast(151/6 AS DECIMAL(9,2))
SELECT 1.0*151/6