Float在数据库Sql Server中存储为Real

时间:2017-01-13 06:32:49

标签: sql sql-server tsql precision sqldatatypes

Float为什么Realsys.columnsInformation_schema.columns precision <= 24时存储为CREATE TABLE dummy ( a FLOAT(24), b FLOAT(25) )

SELECT TABLE_NAME,
       COLUMN_NAME,
       DATA_TYPE,
       NUMERIC_PRECISION
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'dummy' 

检查数据类型

+------------+-------------+-----------+-------------------+
| TABLE_NAME | COLUMN_NAME | DATA_TYPE | NUMERIC_PRECISION |
+------------+-------------+-----------+-------------------+
| dummy      | a           | real      |                24 |
| dummy      | b           | float     |                53 |
+------------+-------------+-----------+-------------------+

结果:

float

real小于或等于precision时,为什么24存储为require 'numerizer' require 'chronic' puts Chronic::Numerizer.method(:numerize).source_location class Chronic::Numerizer def self.numerize(value) puts "here" raise end end puts Chronic::Numerizer.method(:numerize).source_location #p Chronic::Numerizer.numerize(3) p Chronic.parse('January 2nd') 。这是在某处记录的吗?

2 个答案:

答案 0 :(得分:3)

real的ISO同义词是float(24)。

Please refer for more info:
https://msdn.microsoft.com/en-us/library/ms173773.aspx

答案 1 :(得分:3)

来自讨论T-SQL中floatreal之间差异的MSDN article

  

real的ISO同义词是float(24)。

float [ (n) ]
  

其中n是用于以科学计数形式存储浮点数的尾数的位数,因此,它决定了精度和存储大小。如果指定了n,则它必须是介于1和53之间的值.n的默认值为53。

n value | Precision | Storage size
1-24    | 7 digits  | 4 bytes
24-53   | 15 digits | 8 bytes
  

SQL Server将n视为两个可能值之一。 如果1 <= n <= 24,则将n视为24.如果25 <= n <= 53,则将n视为53.

至于为什么SQL Server将其标记为real,我认为它只是一个同义词。但是,在引擎盖下它仍然是float(24)