2011-04-06 68 views
22

我在一個定義爲十進制(8,3)的表中有一個小數列。我想在Select聲明中包含此列,將其轉換爲Varchar並僅顯示兩位小數。我似乎無法找到正確的選項組合,因爲我嘗試的所有東西都會產生三位小數。將十進制轉換爲Varchar

+0

你爲什麼不開始顯示你到目前爲止? – 2011-04-06 19:55:22

+1

您的數據的一個例子,特別是您希望它看起來像總是有幫助的。尼古拉斯包括一個右對齊的答案,因爲你沒有展示如何顯示結果(浪費時間?)。你的目標是儘可能得到最好的答案,而不是不鼓勵這些志願者解決方案。 – JeffO 2011-04-06 20:10:14

回答

35

這裏有一種方法:

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 
+5

切勿將小數點插入'STR()'函數。它會將小數轉換爲浮點數,並且可能會出現時髦的舍入差異。 – 2011-04-06 20:02:14

+1

當要求將其舍入到小數點後兩位時極不可能,但要採取措施。 – 2011-04-06 20:36:02

3

我認爲CAST(ROUND(yourColumn,2) as varchar)應該做的工作。

但是,您爲什麼要在T-SQL中執行這種表示格式?

+0

嘖嘖,謝謝,我從來沒有想到過!當然我嘗試過,我仍然得到3位小數。 – Hosea146 2011-04-06 19:56:32

+0

@ Hosea146寫下我的第一個答案,但沒有正確地閱讀你的問題。 – 2011-04-06 19:57:49

1

希望這將幫助你

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

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

我我不明白爲什麼你想投射到varchar?。如果你投射到varchar再次轉換回decimail爲two小數點

21

您可能需要轉換decimalmoney(或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 
13

如果您正在使用SQL Server 2012 2014或更高版本,使用格式函數:

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

審查Microsoft話題以及如何定義格式字符串的.NET格式語法。

對於這個問題的一個例子是:

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

這應該是正確的答案。 – Renan 2016-08-03 16:52:08

1

希望這會有所幫助。

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) 
相關問題