Могу ли я обрезать при округлении

В SQL Server 2014 у меня есть некоторые значения с завершающими нулями, а также некоторые значения после десятичного знака.

select top 25 
    ProductName, round(UnitPrice, 1) as 'Price of Products'
from 
    Products

Этот запрос возвращает примерно такой результат:

Chai                           18.00
Chang                          19.00
Aniseed Syrup                  10.00
Chef Anton's Cajun Seasoning   22.00
Chef Anton's Gumbo Mix         21.40

Мой вопрос: могу ли я удалить конечные нули после десятичного знака, сохранив любое значение, которое может быть там, например, 21,40, в то время как другие значения просто остаются равными 18 или 22, поскольку округление не удаляет конечные нули


person James Owen    schedule 07.10.2015    source источник
comment
Джеймс, ты решаешь свою проблему не с того конца. Предполагается, что SQL Server предоставляет данные, а не представление. Если вы хотите отображать пользователю 18 вместо 18.00, внесите изменения в компонент, который отображает данные, а не в компонент, который предоставляет данные.   -  person Tomalak    schedule 07.10.2015
comment
чтобы ответить на вопрос, да, это можно сделать, но это будет грязно делать в TSQL. Как сказал @Tomalak, лучше всего делать это на стороне клиента. Если вы абсолютно не можете этого сделать, то так и скажите, и я уверен, что мы сможем написать необходимый TSQL. По сути, отображать центы только тогда, когда они не равны нулю, верно?   -  person Greg    schedule 07.10.2015
comment
Да, это правильно. Я хотел бы отображать центы, когда они не равны нулю, иначе удалите все нули в конце. поэтому, если бы это было 19,40, отображались бы центы, но если бы это было 21,00, отображалось бы просто 21.   -  person James Owen    schedule 08.10.2015


Ответы (2)


В SQL Server 2014 есть функция FORMAT.

Если округлить цену до 2 знаков после запятой, строка форматирования должна выглядеть так:

FORMAT(ROUND(UnitPrice, 2), '0.##')

На самом деле вам не нужно явное ROUND, FORMAT сделает это в любом случае:

FORMAT(UnitPrice, '0.##')
person Vladimir Baranov    schedule 08.10.2015

Вот хак, это работает, если у вас всегда будет десятичный знак.

create table t1 (col1 decimal (5,2));

insert into t1 (col1) values (10.00)
insert into t1 (col1) values (10.50)

select case col1 % 1
  when 0 then PARSENAME(col1, 2)
  else col1
end
from t1
person Greg    schedule 08.10.2015