SQL Serverでは、FLOAT
またはREAL
を使用して、IEEE 754規格で定義されている格納形式がクリアされた浮動小数点値を格納できます。固定小数点値の場合、DECIMAL
タイプ(同義語はNUMERIC
です)を使用できます。しかし、私は、SQL Serverが内部で値DECIMAL
をどのように格納するかについてはあまりよく分かりません。例えば、私はテーブルを定義した場合、次のように行を挿入:SQL Serverはdecimal型の値を内部的にどのように格納しますか?
01 70 E0 00 00
この六角:SQL Serverの店が数5.7456が、私はこれを得た方法
IF OBJECT_ID('dbo.test_number_types') IS NOT NULL DROP TABLE dbo.test_number_types;
CREATE TABLE dbo.test_number_types
(
id INT IDENTITY(1, 1),
c1 NUMERIC(5, 4)
)
GO
INSERT INTO dbo.test_number_types(c1)VALUES(5.7456);
私はDBCC PAGE
コマンドを使用
01 70 E0 00 00
になるのか、それが整数部分のバイト数と小数部分のバイト数を決定する方法を理解できません。誰も助けることができますか?
ところで、「SQL Server 2012内部」という本を確認しました。データ型の保存専用の章があります。しかし、DECIMAL
タイプのストレージは本に記載されていないようです。
ヒント:BCD、2進化10進数(https://でアン。 wikipedia.org/wiki/Binary-coded_decimal)。私はこれがSQL Serverが実際に値を格納する方法であるとは信じられませんが、他の言語で固定小数点値を格納するための非常に典型的な方法です。 –
ゴードンさんにリンクありがとうございました。私は見てみましょう。 –
@ GordonLinoff私は試みたが、BCDエンコーディングではないようだ。 –