-1

SQL Server でクエリのロジックを再確認したかったのです。

アイデアは、次の値を入力できるようにすることであり、結果が末尾 4 桁の 10 進数であることを確認します。

の可能な値@LABORQTY:

1,200

1,200.42

1200 (Integer)

1200.42

1200 (As a String)

1200.42 (As a String)

値が文字列の場合、次のエラーが発生します。 Error converting data type nvarchar to numeric.

これが私のコードです:

CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', ''))

ただし、毎回の出力は 10 進数である必要があります: 1200.4200

4

2 に答える 2

2

あなたの質問は本当に混乱していますが、次のパラメーターに従って回答します。

@laborqty は VARCHAR です

@laborqty には、次の値のいずれかが含まれる可能性があります。

'1200'
'1200.42'
'1,200'
'1,200.42'

その場合CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', ''))、実際には小数精度が最大 4 桁の 10 進数が生成されます。クエリ ツール/プログラミング言語が 1200.4200 として出力するかどうかは、まったく別の問題です。1200.42 を出力し、末尾のゼロを削除するだけでよいかもしれません

じっとしている場合Error converting data type varchar to numeric.は、数値文字列に他の文字データ (コンマではない) があります。

末尾のゼロが確実に必要な場合は、出力する前に文字列にフォーマットします

FORMAT(CONVERT(decimal(12,4), '1200.42'), '0.0000')

これにより、末尾に 4 つのゼロがある文字列が生成されます

于 2019-01-23T09:39:36.907 に答える
0

あなたが使用することができます:

select CAST ( REPLACE( '1,200.4' , ',','') AS decimal(17,4))
于 2019-01-23T09:39:43.057 に答える