Целочисленное деление в SQL Server - PullRequest
40 голосов
/ 09 августа 2010

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

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

Ответы [ 7 ]

43 голосов
/ 10 августа 2010

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

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

SELECT 151/CAST(6 AS DECIMAL (9,2))
32 голосов
/ 09 августа 2010

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

до

SELECT 151/6.0

или

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

или

SELECT 151/(6 * 1.0)
9 голосов
/ 09 августа 2010

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

Необходимо убедиться, что хотя бы один из аргументов имеет тип с плавающей запятой:

SELECT 151.0/6

или

SELECT 151/6.0
4 голосов
/ 14 апреля 2014

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

/ Делит два числа и возвращает плавающее-point result.

\ Делит два числа и возвращает integer result.

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

2 голосов
/ 17 июля 2015

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

Пример

SELECT 151.000000/6
OR
SELECT 151/6.000000

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

+25,16666666

1 голос
/ 28 августа 2010

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

Целочисленное значение, CAST - после математики ...

0 голосов
/ 25 августа 2016

Попробуйте это:

SELECT 1.0*cast(151/6 AS DECIMAL(9,2))
SELECT 1.0*151/6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...