54

選択列の数字のフォーマットに問題があります。FORMAT を使用しましたが、機能しません。これが私のコラムです:

sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60) TotalSentMinutes    

私はこれを使用しました:

FORMAT(sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60),2) TotalSentMinutes  

エラー:

'format' は認識される組み込み関数名ではありません。

この計算をフォーマットするにはどうすればよいですか?

4

8 に答える 8

16

DECIMAL にキャストし、スケールを 2 桁に指定することができます

10 進数と数値

だから、次のようなもの

DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))

SQLFiddle デモ

ただし、精度が失われるため、これを UI/Report レイヤーで行うことをお勧めします。

(私の意見では) 書式設定は、UI/レポート/表示レベルで行う必要があります。

于 2013-05-07T06:07:26.160 に答える
5

結果を数値にキャストしてみてください

CAST(sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60)
    AS numeric(10,2)) TotalSentMinutes

入力

1
2
3

出力

1.00
2.00
3.00

于 2013-05-07T07:30:14.153 に答える
2

あなたのフォーマット構文は間違っています実際の構文は

 FORMAT ( value, format [, culture ] )

このリンクをたどってください。

詳細はこちら

于 2013-05-07T06:21:39.787 に答える
1

だから、次のようなもの

DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))

ただし、精度が失われるため、これを UI/Report レイヤーで行うことをお勧めします。

于 2016-06-02T13:10:22.533 に答える
-2

動的な通貨精度があると仮定します

  • value => 1.002431

  • currency precision => 3

  • `結果 => 1.002

CAST(Floor(your_float_value) AS VARCHAR) + '.' + REPLACE(STR(FLOOR((your_float_value FLOOR(your_float_value)) * power(10,cu_precision)), cu_precision), SPACE(1), '0')

于 2013-08-29T08:12:35.993 に答える