Сбросить значение 0 в десятичных разрядах - PullRequest
1 голос
/ 02 декабря 2009

Я хочу спросить, знает ли кто-нибудь запрос об отбрасывании значения 0 в десятичном формате.

Eg. У процентов имени поля есть эти значения

Процент

+770,00000000000000000000, +340,670000000000000000000, +96,00000000000000000000, +4400,56000000000000000000, +109,89000000000000000000, +109,00000000000000000000, 37,00000000000000000000,

В настоящее время я использую запрос «выбрать приведение ([Процент] как десятичное число (9,2)) как [Процент] из таблицы», и в результате получится

Результат

770,00, 340,67, 96,00, 4400,56, 109,89, 109,00, 37,00

Я хочу, чтобы результат был на самом деле: ->

770, 340,67, 96, 4400,56, 109,89, 109, 37

Ответы [ 4 ]

2 голосов
/ 02 декабря 2009

Этот довольно неприятный TSQL может просто выполнить работу:

select 
  case 
    right(
       cast(cast([percent] as decimal(9,2)) as nvarchar(11))
    ,2)

    when '00' then cast(cast([percent] as int) as nvarchar(11)) as [percent]
    else cast(cast([percent] as decimal(9,2)) as nvarchar(11)) as [percent]

 end
from table

конечно, она всегда возвращает строку, но это присуще вашим требованиям, вы ищете представление для значения ...

Я думаю, вам следует отложить это представление там, где оно имеет больше смысла (отчет, сетка данных?), И у вас есть больше инструментов (например, string.format своего рода инструменты), чтобы сделать работу лучше.

1 голос
/ 02 декабря 2009

Вы можете использовать комбинацию DECIMAL и FLOAT. Десятичная дробь сначала округляет до 2 десятичных разрядов, а затем плавает, чтобы удалить ненужные 0

, например

select cast(cast([Percent] as decimal(9,2)) AS FLOAT) as [Percent] 

На примере 340.69999999999999 сначала округляем до 340.70, затем убираем ноль, получая 340,7. Как и при любом округлении, некоторая точность будет потеряна.

0 голосов
/ 11 февраля 2014

Вы можете использовать функцию CONVERT дважды, один раз для сброса 0 путем преобразования в float и один раз для преобразования его в varchar с style 128

DECLARE @Sample AS TABLE
    (
     SomeNumber DECIMAL(26, 12)
    )

INSERT INTO @Sample
    VALUES  ( 770.00000000000000000000 )
,           ( 340.670000000000000000000 )
,           ( 96.00000000000000000000 )
,           ( 4400.56000000000000000000 )
,           ( 109.89000000000000000000 )
,           ( 109.00000000000000000000 )
,           ( 37.00000000000000000000 )


SELECT CONVERT(VARCHAR(25), CONVERT(FLOAT, SomeNumber), 128) AS NoZeros
    FROM @Sample
0 голосов
/ 02 декабря 2009

Вы могли бы просто бросить на FLOAT.

...