2

SQL Server が数値リテラルに割り当てる型は何ですか: 2. 、つまり 2 の後にドットが続きますか?

私が興味を持った理由:

select convert(varchar(50), 2.)
union all
select convert(varchar(50), 2.0)

戻り値:

2
2.0

2. と 2.0 の型の違いは何ですか?

SQLサーバーは、数値を保持できる最小限のストレージタイプを見つけることにより、数値自体に応じて数値リテラルにタイプを割り当てるようです。1222333 の値は int として格納され、1152921504606846975 は big int として格納されます。

ありがとう

編集:これが非常に重要である理由も追加したいと思います。SQL Server 2008 r2 では、select 2/5 は 0 を返しますが、select 2./5 は 0.4 を返します。これは、SQL サーバーがこれらの型を処理する方法によるものです。オラクルとアクセスでは、2/5 を選択します (オラクル: ダミーから 2/5 を選択) は 0.4 を返します。そうあるべきです。SQL Server 2012 でこの動作が修正されたのだろうか。

4

1 に答える 1

0

このスクリプトは私の質問に答えるかもしれません。2. の型は数値(1, 0)です。

create table dbo.test_type (field sql_variant)
go

delete from dbo.test_type
go

INSERT INTO dbo.test_type
VALUES (2.);

INSERT INTO dbo.test_type
VALUES (2.0);


SELECT field
     , sql_variant_property (field
                           , 'BaseType')
         AS BaseType
     , sql_variant_property (field
                           , 'Precision')
         AS Precision
     , sql_variant_property (field
                           , 'Scale')
         AS Scale
  FROM dbo.test_type

戻り値:

2     numeric   1   0
2.0   numeric   2   1

これが、2.0 を varchar に変換すると結果が 2.0 になる理由です。SQLサーバーは精度を記録しているようです。

于 2012-09-19T03:35:11.533 に答える