Десятичное форматирование sql сервера в строке запроса - PullRequest
1 голос
/ 28 апреля 2011

Я нашел несколько решений в Интернете, но ни одно из которых действительно не делает то, что я ищу. Итак, здесь идет ..
В моей таблице есть несколько столбцов числового типа (8, 4), числового (8, 5) и т. Д., И когда я получаю данные, они приходят со всеми конечными нулями. Есть ли способ, которым я могу отформатировать его, чтобы он убрал все конечные и ведущие 0? Я не хочу указывать длину точности. Вот несколько примеров того, что я ищу:

145.5000 -> 145.5
145.6540 -> 145.654
73.4561 -> 73.4561
37.0000 -> 37

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Float и real являются приблизительными типами данных, поэтому это может не работать с каждым значением, с которым вы сталкиваетесь. Учитывая, что у вас есть только 4 или 5 цифр точности, я думаю, что этот метод всегда будет работать, но вы захотите проверить его довольно хорошо, прежде чем внедрять его в производство.

DECLARE @d DECIMAL(8,5)

select @d = 5.12030

Select Convert(Float, @d)
1 голос
/ 28 апреля 2011

В идеале вы хотите сделать это в коде переднего конца

, так как вы будете различать 0.37 и 37.0, если все, что вам нужно, это 37?

Вотв SQL

заменить 0 пробелом и выполнить обрезку, а затем заменить пробел обратно на 0

пример

edit: пропущена конечная точка перед ... добавлена ​​какcase case

DECLARE @d DECIMAL(8,5)
select @d = 5.12030

SELECT CASE WHEN RIGHT(REPLACE(RTRIM(LTRIM(REPLACE(CONVERT(VARCHAR(100),@d),'0',' '))),' ','0'),1) = '.'
THEN REPLACE(REPLACE(RTRIM(LTRIM(REPLACE(CONVERT(VARCHAR(100),@d),'0',' '))),' ','0'),'.','')
ELSE
REPLACE(RTRIM(LTRIM(REPLACE(CONVERT(VARCHAR(100),@d),'0',' '))),' ','0') END
...