У меня есть десятичный столбец в таблице, определяемой как десятичная (8,3). Я хотел бы включить этот столбец в оператор Select
, преобразовать его в Varchar
и отображать только два десятичных знака. Кажется, я не могу найти правильную комбинацию опций, потому что все, что я пытаюсь сделать, все равно создает три десятичных знака.
Преобразование десятичного в Varchar
Ответ 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)