Хороший способ отформатировать десятичную в SQL Server - PullRequest
3 голосов
/ 17 мая 2010

Мы храним десятичное число (9,8) в нашей базе данных. Он может иметь любое количество знаков после запятой (ну, не более 8). Я разочарован, потому что я хочу отобразить его как читабельный текст как часть более крупной строки, созданной на сервере. Я хочу, чтобы число десятичных знаков справа от десятичной точки было ненулевым, например:

0.05
0.12345
3.14159265

Все хорошо

Если я делаю

CAST(d AS varchar(50)) 

Я получаю форматирование как:

0.05000000
0.12345000
3.14159265

Я получаю похожий вывод, если я приведу / преобразовал в float или другой тип перед преобразованием в varchar. Я знаю, как сделать фиксированное количество знаков после запятой, например:

0.050
0.123
3.142

Но это не то, чего я хочу.

Да, я знаю, что могу сделать это посредством сложных манипуляций со строками (ЗАМЕНА и т. Д.), Должен быть хороший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 17 мая 2010

Код скопирован почти дословно отсюда (также обсуждается 6-значный предел форматирования с плавающей запятой в режиме 0):

DECLARE @num3 TABLE (i decimal(9, 8))

INSERT  @num3
        SELECT  0.05
        UNION ALL
        SELECT  0.12345
        UNION ALL
        SELECT  3.14159265 
SELECT  i
       ,CASE WHEN PATINDEX('%[1-9]%', REVERSE(i)) < PATINDEX('%.%', REVERSE(i))
             THEN LEFT(i, LEN(i) - PATINDEX('%[1-9]%', REVERSE(i)) + 1)
             ELSE LEFT(i, LEN(i) - PATINDEX('%.%', REVERSE(i)))
        END 'Converted'
FROM    @num3
2 голосов
/ 17 мая 2010

Играя вокруг (сервер sql) Я обнаружил, что забрасывание первым делает трюк ..

select cast( cast(0.0501000 as float) as varchar(50) )

выходы

0.0501

0 голосов
/ 17 мая 2010

Для всего, кроме довольно простых манипуляций, я бы подумал сделать это в вашем вызывающем коде вместо tbh, так как я думаю, что обычно для SQL лучше возвращать данные как есть из базы данных, а затем оставить форматирование что до того, что его вызывает, что, скорее всего, лучше подготовлено для манипулирования строками. Особенно, если вы обнаружите, что прыгаете через обручи, пытаясь достичь этого.

...