15

10 進値を変換してコンマを含めるにはどうすればよいですか?

これは私を助けます。しかし、私の問題は、小数点以下の桁数が2のみに設定されている..小数点以下を2、3、または4にしたい..例

1,234.123   or    1,234.12345

私は試した

convert(varchar, convert(decimal(18, 4), 1234.1234567), 1) 

出力: 1234.1234

コンマはありません。しかし、お金を使うと小数は 2 しかありません

convert(varchar, convert(お金, 1234.1234567), 1)

出力 : 1,234.12

4

5 に答える 5

31

ありがたいことに(?)、SQL Server 2012+では、FORMAT()を使用してこれを実現できるようになりました。

FORMAT(@s,'#,0.0000')


以前のバージョンでは、本当に醜いように見えるリスクがあります

[クエリ]

declare @s decimal(18,10);
set @s = 1234.1234567;
select replace(convert(varchar,cast(floor(@s) as money),1),'.00',
    '.'+right(cast(@s * 10000 +10000.5 as int),4))

最初の部分では、MONEY-> VARCHARを使用してコンマを生成しますが、FLOOR()を使用して小数が確実にに移動するようにし.00ます。これは簡単に識別でき、シフト()とCASTをINT(切り捨て)として組み合わせ*10000て桁を導出することにより、小数点以下4桁に置き換えられます。

【結果】

|   COLUMN_0 |
--------------
| 1,234.1235 |

ただし、SQL Server Management StudioまたはSQLCMDを使用してビジネスレポートを配信する必要がない限り、これは、実行できたとしても、決して正しいソリューションではありません。フロントエンドまたはレポート環境には、表示フォーマットを処理するための適切な機能があります。

于 2012-11-06T08:21:49.077 に答える
15

これが良い考えだとは考えずに...

select dbo.F_AddThousandSeparators(convert(varchar, convert(decimal(18, 4), 1234.1234567), 1))

関数

-- Author:      bummi
-- Create date: 20121106
CREATE FUNCTION F_AddThousandSeparators(@NumStr varchar(50)) 
RETURNS Varchar(50)
AS
BEGIN
declare @OutStr varchar(50)
declare @i int
declare @run int

Select @i=CHARINDEX('.',@NumStr)
if @i=0 
    begin
    set @i=LEN(@NumStr)
    Set @Outstr=''
    end
else
    begin   
     Set @Outstr=SUBSTRING(@NUmStr,@i,50)
     Set @i=@i -1
    end 


Set @run=0

While @i>0
    begin
      if @Run=3
        begin
          Set @Outstr=','+@Outstr
          Set @run=0
        end
      Set @Outstr=SUBSTRING(@NumStr,@i,1) +@Outstr  
      Set @i=@i-1
      Set @run=@run + 1     
    end

    RETURN @OutStr

END
GO
于 2012-11-06T07:28:06.203 に答える
9

関連する SO の質問から: Format a number with commas but without decimals in SQL Server 2008 R2?

SELECT CONVERT(varchar, CAST(1112 AS money), 1)

これは、SQL Server 2008 R2 でテストされました。

于 2015-01-05T21:11:53.350 に答える
2

SQL Azure Reporting Services を使用している場合、「フォーマット」機能はサポートされていません。これは、SSRS のグラフでツールヒントを書式設定する唯一の方法です。したがって、回避策は、ツールチップに使用する書式設定された数値の文字列表現を持つ列を返すことです。したがって、SQL は書式設定の場所ではないことに同意します。このような場合を除いて、ツールには表示の書式設定を処理するための適切な機能がありません。

私の場合、コンマを使用して小数点なし (10 進数 2 を入力) で書式設定された数値を表示する必要があり、データセット クエリで計算された列のこの宝石が表示されました。

,Fmt_DDS=reverse(stuff(reverse(CONVERT(varchar(25)),cast(SUM(kv.DeepDiveSavingsEst) as money),1)), 1, 3, ''))

それは機能しますが、非常に見苦しく、今後レポートを維持する人には明らかではありません。やあクラウド!

于 2013-01-30T01:04:52.610 に答える
-1

SQL (より正確には RDBMS) は、出力をフォーマットするための正しい選択とはなりません。データベースは生データを配信する必要があり、それを宛先アプリケーションでフォーマット (またはより一般的には処理) する必要があります。

ただし、使用する特定のシステムによっては、UDF (ユーザー定義関数) を記述して目的を達成することができます。ただし、実際には varchar を返すことになり、それ以上の処理 (たとえば、要約) ができないことに注意してください。

于 2012-11-06T07:10:15.260 に答える