Преобразовать десятичное число в Varchar - PullRequest
31 голосов
/ 06 апреля 2011

У меня есть десятичный столбец в таблице, определенный как десятичный (8,3). Я хотел бы включить этот столбец в оператор Select, преобразовать его в Varchar и отображать только два десятичных знака. Кажется, я не могу найти правильную комбинацию вариантов, чтобы сделать это, потому что все, что я пытаюсь сделать, все равно дает три знака после запятой.

Ответы [ 6 ]

43 голосов
/ 06 апреля 2011

Вот один из способов:

create table #work
(
  something decimal(8,3) not null 
)

insert #work values ( 0 )
insert #work values ( 12345.6789 )
insert #work values ( 3.1415926 )
insert #work values ( 45 )
insert #work values ( 9876.123456 )
insert #work values ( -12.5678 )

select convert(varchar,convert(decimal(8,2),something))
from #work

, если вы хотите, чтобы он был выровнен по правому краю, что-то вроде этого должно сделать вас:

select str(something,8,2) from #work
25 голосов
/ 06 апреля 2014

Если вы используете SQL Server 2012, 2014 или новее, используйте вместо этого функцию форматирования:

select Format( decimalColumnName ,'FormatString','en-US' )

Просмотрите тему Microsoft и синтаксис формата .NET, чтобы узнать, как определить строку формата.

Примером этого вопроса будет:

select Format( MyDecimalColumn ,'N','en-US' )
24 голосов
/ 07 апреля 2011

Вам может потребоваться преобразовать decimal в money (или decimal(8,2)), чтобы получить точное форматирование.Метод convert может принимать третий параметр, управляющий стилем форматирования:

convert(varchar, cast(price as money))       12345.67
convert(varchar, cast(price as money), 0)    12345.67
convert(varchar, cast(price as money), 1)    12,345.67
4 голосов
/ 06 апреля 2011

Я думаю, CAST(ROUND(yourColumn,2) as varchar) должен сделать работу.

Но почему вы хотите сделать это форматирование презентации в T-SQL?

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

Надеюсь, это поможет вам

Cast(columnName as Numeric(10,2)) 
        or

Cast(@s as decimal(10,2))

Я не понимаю, почему вы хотите привести к varchar?

1 голос
/ 11 января 2017

Надеюсь, это поможет.

DECLARE  @emp_cond nvarchar(Max) =' ',@LOCATION_ID  NUMERIC(18,0)   
SET@LOCATION_ID=10110000000
IF CAST(@LOCATION_ID AS VARCHAR(18))<>' ' 
            BEGIN
                SELECT @emp_cond= @emp_cond + N' AND 
CM.STATIC_EMP_INFO.EMP_ID = ' ' '+  CAST(@LOCATION_ID AS VARCHAR(18))  +' ' ' '
           END
print  @emp_cond  
EXEC( @emp_cond) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...