web-dev-qa-db-ja.com

SQLで小数点以下2桁を取得する方法は?

選択列の数字の書式設定に問題があります。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'は認識される組み込み関数名ではありません。

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

41
cihata87

これを試してください-

DECLARE @i FLOAT = 6.677756

SELECT 
      ROUND(@i, 2)
    , FORMAT(@i, 'N2')
    , CAST(@i AS DECIMAL(18,2))
    , SUBSTRING(PARSENAME(CAST(@i AS VARCHAR(10)), 1), PATINDEX('%.%', CAST(@i AS VARCHAR(10))) - 1, 2)
    , FLOOR((@i - FLOOR(@i)) * 100)

出力:

----------------------
6,68
6.68
6.68
67
67
98
Devart

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

10進数と数値

だから、のようなもの

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

SQLFiddle DEMO

ただし、これはUI /レポートレイヤーで行うことをお勧めします。これにより、精度が低下するためです。

(私の意見では)フォーマットはUI /レポート/表示レベルで行われるべきです。

12
Adriaan Stander

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

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

4
Mandeep Singh

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

 FORMAT ( value, format [, culture ] )

このリンクに従ってください

詳細はここをクリック

2
Deniyal Tandel

だから、のようなもの

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

ただし、これはUI /レポートレイヤーで行うことをお勧めします。これにより、精度が低下するためです。

1
889832

DECLARE @i AS FLOAT = 2 SELECT @i/3 SELECT cast(@i/cast(3 AS DECIMAL(18,2))as decimal(18,2))

因子と結果の両方で、キャストを小数と見なす必要があります。

1
Leon Poh