本文转至【http://blog.ahnw.gov.cn/user1/itblog/archives/2007/8599.html】
decimal(numeric ) 同义,用于精确存储数值
float 和 real 不能精确存储数值
decimal
数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal
数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。
定义 decimal
的列、变量和参数的两种特性如下:
numeric
和 decimal
数据类型的默认最大精度值是 38。在 Transact-SQL 中,numeric
与 decimal
数据类型在功能上等效。
当数据值一定要按照指定精确存储时,可以用带有小数的 decimal
数据类型来存储数字。
float 和 real 数据
float
和 real
数据类型被称为近似的数据类型。在近似数字数据类型方面,float
和 real
数据的使用遵循 IEEE 754 标准。
近似数字数据类型并不存储为多数数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于
float
和 real
数据类型的这种近似性,当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用
integer
、decimal
、money
或 smallmone
数据类型。
在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 float
或 real
列。最好限制使用 float
和 real
列做
> 或 < 的比较。
IEEE 754 规格提供了四种舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™
使用上舍入。所有的数值必须精确到确定的精度,但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化一个浮点值。
转换 decimal 和 numeric
数据
对于 decimal
和 numeric
数据类型,Microsoft® SQL Server™
将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal
(5,5
) 和
decimal
(5,0
) 被当作不同的数据类型。
在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric
数据值,且必然使用最小的精度和小数位数。例如,常量
12.345 被转换为 numeric
值,其精度为 5,小数位为 3。
从 decimal
或 numeric
向 float
或 real
转换会导致精度损失。从
int
、smallint
、tinyint
、float
、real
、money
或 smallmoney
向 decimal
或 numeric
转换会导致溢出。
默认情况下,在将数字转换为较低精度和小数位数的 decimal
或 numeric
值时,SQL Server
使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。
分享到:
相关推荐
- 当从`DECIMAL`或`NUMERIC`数据类型转换为`FLOAT`或`REAL`时,可能会导致精度损失。这是因为`FLOAT`和`REAL`数据类型是近似数值类型,它们存储的值是近似的而不是精确的。 - **其他类型转换**: - 从`INT`、`...
SQL 数据库中的数值型数据类型包括 numeric、decimal、money 和 smallmoney 等。 * numeric 数据类型:可以存储从 10^38 到 10^38 之间的数值,精度可以指定。 * decimal 数据类型:与 numeric 数据类型相同,用于...
浮点型数据类型用于存储十进制小数,包括 real 型、float 型、decimal 型和 numeric 型。 * real 型数据的存储大小为 4 个字节,可精确到小数点后第 7 位数字。这种数据类型的数据存储范围为从-3.40E+38 ~ -1.18E-...
1. **数值类型**:包括整数类型(如`int`、`smallint`、`tinyint`)、浮点类型(如`float`、`real`)以及精确数值类型(如`decimal`、`numeric`)。这些类型适用于存储数值数据,其中`decimal`和`numeric`类型允许...
除了上述数据类型外,SQL Server 还提供了其他数据类型,包括 Decimal、Numeric、Float、Real、Int、Smallint、Tinyint、Money、Smallmoney、Bit、Cursor、Sysname、Timestamp、Uniqueidentifier 等。 数据类型的...
浮点型数据类型用于存储十进制小数,包括 real、float、decimal 和 numeric 四种。real 型数据的存储大小为 4 个字节,数值范围是-3.40E+38~-1.18E-38 和 1.18E-38~3.40E+38;float 型数据的存储大小为 8 个字节,...
- **描述**:`DECIMAL` 和 `NUMERIC` 数据类型相同,可以提供小数所需的实际存储空间,但也有一定限制。它们可以存储从 `-10^38 - 1` 到 `10^38 - 1` 之间的数值。 - **存储**:`DECIMAL` 和 `NUMERIC` 类型根据...
- MS SQL Server的数值类型包括decimal、numeric、money和smallmoney,以及float和real。 - Oracle的数值类型主要是number,可以指定精度和小数位数。 - DB2的数值类型包括decimal、numeric、real和double,其中...
在SQL Server 2000中,数据类型主要分为几大类别,包括整数数据类型、浮点数据类型、二进制数据类型、字符数据类型、日期和时间数据类型、以及其他特殊数据类型。 一、整数数据类型 1. INT (INTEGER):INT数据类型...
- **定义**: `NUMERIC` 数据类型与 `DECIMAL` 数据类型完全相同。 - **存储**: 同 `DECIMAL` 类型一样,可以根据需要使用不同的字节数量来存储。 #### 四、二进制数据类型 二进制数据类型用于存储二进制数据。 ##...
它们各自拥有不同的特点和优势,并且在数据类型的定义上也存在差异。本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server ...
Decimal和Numeric数据类型用于存储高精度的数值,范围为`-10^38-1`到`10^38-1`,在定义时需要指定精度和小数位数。这种类型特别适用于财务计算和其他需要高精度数值运算的场景。 #### Float (近似数值型) Float...
SQL Server 2008 中的数值数据类型包括 integer、smallint、tinyint、bigint、decimal、numeric、float、real 和 money 等。这些数据类型用于存储数值数据。例如,integer 数据类型用于存储整数值,而 decimal 数据...
- **Float[(n)]**、**Real**:这两个数据类型用于存储近似数值数据。`Real`是`Float`的一个子类型,它们都使用科学计数法存储数值,但在存储精度和占用空间上有所不同。 #### 7. 货币数据类型 - **Money**:用于...
数字类型是 GBase 8s 中最基本的数据类型,包括 SMALLINT、INTEGER、INT8、BIGINT、DECIMAL、NUMERIC、FLOAT、SMALLFLOAT、REAL、DOUBLE、LONG、SERIAL、SERIAL8、BIGSERIAL、MONEY 等。这些数字类型可以满足各种...
在SQL中,数据类型是用来定义和组织数据的基本结构,它们决定了数据可以存储的类型和形式。转换则是将一种数据类型转换成另一种的过程,这在处理不同系统或接口间的数据交互时非常常见。JDBC(Java Database ...
### SQL数据类型与C#数据类型的转换 在开发过程中,我们经常会遇到需要将数据库中的数据类型映射到编程语言中的情况。特别是在使用SQL Server作为后端数据库与C#进行交互时,了解这两种环境下的数据类型及其对应...
DECIMAL和NUMERIC是定点数类型,提供精确数值计算,它们允许指定小数位数。 3. 字符串类型:CHAR和VARCHAR是最常见的字符串数据类型。CHAR是固定长度的,而VARCHAR是可变长度的。还有NCHAR和NVARCHAR,它们用于存储...
了解并掌握SQL Server的各种数据类型,对于数据库管理员和开发人员而言是基础且重要的技能,这有助于他们更加高效地设计和维护数据库系统,确保数据的安全性和完整性。同时,熟悉这些数据类型也便于进行数据库的性能...
- **浮点型和定点型**: `float`和`real`用于存储浮点数,其中`real`是4字节,精度约为7位小数,`float`则有8字节版本(精度约为15位小数)和16字节版本(精度约为30位小数)。`decimal`和`numeric`是定点数类型,...