Подтвердить что ты не робот

Преобразование десятичного в Varchar

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

4b9b3361

Ответ 1

Здесь один из способов:

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

Ответ 2

Вам может потребоваться преобразовать 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

Ответ 3

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

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

Просмотрите Microsoft тему и синтаксис формата .NET для определения строки формата.

Пример для этого вопроса:

select Format( MyDecimalColumn ,'N','en-US' )

Ответ 4

Я думаю, что CAST(ROUND(yourColumn,2) as varchar) должен выполнить эту работу.

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

Ответ 5

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

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

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

Я не понимаю, почему вы хотите наложить на varchar?. Если вы добавили в varchar, снова конвертируйте обратно в decimail для two десятичных точек

Ответ 6

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

DECLARE  @emp_cond nvarchar(Max) =' ',@LOCATION_ID  NUMERIC(18,0)   
[email protected]_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)