Declare @BadDecimal varchar(5)
Set @BadDecimal = '4.5'
Declare @GoodDecimal Decimal
Set @GoodDecimal = @BadDecimal
Select @GoodDecimal
--Outputs 5
なんで?
Declare @BadDecimal varchar(5)
Set @BadDecimal = '4.5'
Declare @GoodDecimal Decimal
Set @GoodDecimal = @BadDecimal
Select @GoodDecimal
--Outputs 5
なんで?
試す
Declare @GoodDecimal Decimal(2,1)
編集: リクエスト後に (2,1) に変更されました。
Coentjie が私を打ちのめしました argggg...
この形式 Decimal(p,s) を使用して小数を宣言する必要があります
p = 小数点の左右両方に格納できる 10 進数の最大合計桁数。精度は、1 から最大精度 38 までの値でなければなりません。デフォルトの精度は 18 です。
s = 小数点の右側に格納できる 10 進数の最大桁数。Scale は 0 から p までの値でなければなりません。位取りは、精度が指定されている場合にのみ指定できます。デフォルトのスケールは 0 です。したがって、0 <= s <= p です。最大ストレージ サイズは、精度によって異なります。
試すSet @BadDecimal = '4,5'
明示的な10進数(数字、精度)へのキャストまたは変換は機能します:
SELECT CONVERT(DECIMAL(5, 2), '4.5')
SELECT CAST('4.5' AS DECIMAL(5,2))
SQLServer ヘルプには、(数字、精度) の各組み合わせが個別のデータ型として処理されると記載されています。