web-dev-qa-db-ja.com

SQL92仕様によると、精度=スケールのフィールドに値1を格納できますか?

NUMERIC 3,3として定義されているフィールドに数値1を格納することは、SQL92に準拠していますか?

DECIMAL 3,3はどうですか?

これは、精度が浮動小数点または静的であり、すべてゼロであっても小数点以下3桁でなければならないことを意味しますか?

4
jcalfee314

精度は、小数点以下の桁数の両側に格納できる小数点以下の桁数の合計です。スケールは、小数点の右側にある小数点以下の桁の総数であり、精度以下にすることができます。したがって、DECIMAL(3,3)またはNUMERIC(3,3)に格納できる最大値は0.999です。これを見つける最も簡単な方法は、実際に試してみることです。

Mysql 5.5.20を使用すると、以下は0.999を返します。

SET @val = (SELECT CAST(1 AS DECIMAL(3,3)));
SELECT @val; 

一方、以下は1を返します。

SET @val = (SELECT CAST(1 AS DECIMAL(3,0)));
SELECT @val;

これがお役に立てば幸いです。

EDIT:ほとんどのプラットフォームで上記を実行しようとすると、ある種の算術オーバーフロー例外が発生することを忘れました。たとえば、Microsoft SQL Server 2008で実行されている次のステートメントは、エラーをスローします。

DECLARE @val DECIMAL(3,3);
SET @val = 1;
SELECT @val;
5
Mr.Brownstone