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

Как преобразовать целое число в десятичный в запрос SQL Server?

Столбец height является целым типом в моей таблице SQL Server. Я хочу сделать деление и получить результат как десятичный в моем запросе:

Select (height/10) as HeightDecimal

Как сделать, чтобы HeightDecimal больше не целое? Спасибо.

4b9b3361

Ответ 1

SELECT height/10.0 AS HeightDecimal FROM dbo.whatever;

Если вам нужна конкретная шкала точности, скажите так:

SELECT CONVERT(DECIMAL(16,4), height/10.0) AS HeightDecimal
  FROM dbo.whatever;

Ответ 2

SELECT CAST(height AS DECIMAL(18,0)) / 10

Изменить: Как это работает под капотом?

Тип результата совпадает с типом обоих аргументов или, если они отличаются, определяется таблицей приоритетов типа данных. Поэтому вы можете привести любой аргумент к чему-то нецеловому.

Теперь DECIMAL(18,0), или вы можете равномерно писать только DECIMAL, по-прежнему является своего рода целым типом, потому что этот масштаб по умолчанию 0 означает "без цифр справа от десятичной точки". Таким образом, приведение к нему может в разных обстоятельствах хорошо работать для округления до целых чисел - противоположное тому, что мы пытаемся выполнить.

Однако у DECIMAL есть свои правила для всего. Они, как правило, нецелые, но всегда точные числа. Тип результата деления DECIMAL, который мы заставили определяется специально, чтобы быть в нашем случае DECIMAL (29,11). Следовательно, результат разделения будет округлен до 11 мест, что не связано с делением на 10, но округление становится наблюдаемым при делении на 3. Вы можете контролировать количество округления, манипулируя шкалой левого операнда. Вы можете также округлить больше, но не меньше, разместив еще одну операцию ROUND или CAST вокруг всего выражения.

Идентичная механика управляет более простым и лучшим решением в принятом ответе:

  SELECT height / 10.0

В этом случае тип делителя DECIMAL(3,1), а тип результата - DECIMAL(17,6). Попробуйте делить на 3 и наблюдать разницу в округлении.

Если вы просто ненавидите все разговоры о точности и масштабах и просто хотите, чтобы SQL-сервер выполнял все вычисления в старой старой арифметике с плавающей запятой с двойной точностью, вы также можете заставить это:

SELECT height / CAST(10 AS FLOAT(53))

или эквивалентно просто

SELECT height / CAST (10 AS FLOAT)

Ответ 3

Вы можете либо выслать высоту как десятичную:

select cast(@height as decimal(10, 5))/10 as heightdecimal

или вы поместите десятичную точку в свое значение, которое вы делите на:

declare @height int
set @height = 1023

select @height/10.0 as heightdecimal

см. sqlfiddle с примером

Ответ 4

select cast (height as decimal)/10 as HeightDecimal