asp学习网: 首页 >> asp与数据库 >> sql语句 >> sql数据类型 查询中的数据类型

sql数据类型 查询中的数据类型

本文主要介绍的是sql92标准中的一些数据类型方面的东西,凑合着看吧.

字符串、数值、datetime和interval这四种数据类型中,数值型的种类最多,约束也最多。在不同数据库实现方法之间交换数据时,数值型的精度也最容易降低。Oracle和SQL服务器之间的实现分歧(同样的数据类型长度不同)导致它们之间的数据传递过程会截短数字、改变它们的数值。因此,在移植程序前,你有必须很明确的了解两个平台间的数据定义差异,以及危及数据精度的风险。

基本数值类型
与数值有关的类型统称为数值类型。所有的数值都有精度,精度指的是有效数字位数。有的数值还有标度值(scale value),它用来指示小数点右边的最小有效数字位数。例如,数字1234.56的精度为6,标度值为2,可以定义为NUMERIC(6,2)。

每一个数据库实现方法都有关于如何近似数值或者截短数值的规则。除了提供获取数值长度和其它数值处理所需的属性外,SQL92提供了内建函数,如加、减、乘、除等。所有的数值类型之间都可以互相比较、互相赋值。尽管实现方法不同,但是它们有一个的共同点,即它们的结果一般都保留最大精度。

NUMERIC

用法:NUMERIC(精度,标度值)

是一种精确数值类型,即它是数字的值的文字表示。(可以对该数字进行取舍或者截取以符合指定精度,标度值由预定义的规则确定。)
为了符合标度值指定的小数数字位数,舍去多余的小数部分,舍入过程采用十进制。
数字的总长度等于精度,如果标度值大于0(有小数部分),则长度加1。
小数部分的位数要符合标度值。
DECIMAL | DEC
用法:DECIMAL(精度,标度值) | DEC(精度,标度值)

是一种精确数值类型。
用十进制。
数字的总长度等于精度,如果标度值大于0(有小数部分),则长度加1。
小数部分的位数不得小于标度值,小数位数的上限由数据库提供商设定。

INTEGER | INT
用法: INTEGER(精度)

是一种精确数值类型。
使用二进制或者十进制,这基于表示该数值的二进制位(bit)的个数(这是implementation-specific,与SMALLINT对应)。
标度值恒为0。
数据库供应商对其定义了最大精度和最小精度。
供应商可能会提供的默认精度。
SMALLINT
用法:SMALLINT(精度)

是一种精确数值类型。
位数取舍方法与INTEGER (二进制或者十进制)相同。
标度值恒为0。
最大精度等于或者小于INTEGER的最大精度。
FLOAT
用法:FLOAT(精度)

是一种近似数值类型,即对一个指定的数值用指数形式表示出来,如1.23e-45(等于),该数值类型的取舍和截短方法大多由数据库提供商定义。
当取舍时,使用二进制精度。
精度表示使用的最小位数,最大精度由数据库提供商设定。
REAL
用法:REAL

是一种近似数值类型。
使用二进制精度,最大精度由数据库提供商设定。
其默认精度必须小于DOUBLE PRECISION的默认精度。
DOUBLE PRECISION
用法: DOUBLE PRECISION

是一种近似数值类型。
使用二进制精度,最大精度由数据库提供商设定。
其默认精度必须大于PRECISION的默认精度。
相关理论
数据库提供商在基本数据类型的基础上创建了你实际需要的数据类型。对数值类型来说,它可以包括同名的数据类型,如INT、REAL,也包括为了满足特定场合或者用途而创建的新数据类型。


datetime和interval是两种与时间有关的数据类型。它们的作用体现在以下几个方面:创建或者更改记录库中的某条记录、当某个时间发生时运行记录、或者计算某个datetime变量建立后所经历过的时间。本文将介绍SQL92标准对上述两种数据类型的描述。


Datetime
用于表示时间或者日期的数据类型都属于datetime类型。每一种datetime数据类型都有他自己的用于获取值的长度和它所保存信息的手段,如天、月、分钟、秒、秒的小数等等。

实际上,datetime的实现形式随着定义它的标准不同而拥有不同的长度和格式;然而,各个公司定义的类型都内在地符合下述规则。举例来说,时标(timestamp)的某个实现可能没有分隔符,随着细节的规范不同,长度和格式也发生变化,在某些场合以空格做为间隔符。Datetime数据类型包括:DATA、TIME和TIMESTAMP。让我们仔细研究这些分类,首先我们看看DATA。

DATA
用法:DATA

DATA类型允许没有参数,如精度。
DATA的字段包括年、月和日。
DATA的长度为十个字符: YYYY-MM-DD。(Y表示年、M表示月、D表示日。)
它只允许与其它DATA类型字段相比较。
允许的数字必须符合公历的规范。
TIME
用法:TIME(精度)

该类型包含了小时、分和秒,格式为hh:mm:ss(h表示小时、m表示分、s表示秒)
精度可选择,(……)
时间以世界标准时间(Universal Coordinated Time,UTC)为准,即00:00:00表示.格林威治的午夜,服务器的时区隐含的。
如果不需要秒的小数部分,那么TIME的长度为八个字符。否则就是八位长度在加上精度:hh:mm:ss.p。
它只能与其它TIME类型数据进行比较。
如果没有指定精度,精度默认为0。

TIME WITH TIME ZONE


用法:TIME (精度) WITH TIME ZONE

这个值要符合TIME数据类型
TIMEZONE部分表示相对UTC的时差:00:00:00+hh:mm。它的范围为-12:59到13:00。
精度表示秒的小数部分。
带有TIMEZONE的TIME长度为14个字符加上精度,在加上一个分隔符。
只可以与带有TIMEZONE的TIME类型数据进行比较
TIMESTAMP

用法:TIMESTAMP(精度)

该类型包含有年、月、日、时、分、秒,格式为:YYYY-MM-DD hh:mm:ss.。
可以包括秒的小数部分,这由定义的精度决定。
它的日期部分符合公历标准,时间部分为UTC格式。默认为当地时区。
时标的长度为19个字符,加上精度,在加上精度分隔符。
许多系统偏离上述定义的长度,如UNIX风格时标格式为:,YYYY-MM-DD hh:mm:ss.p。
如果没有定义精度,默认值为6,但是许多数据库公司默认为0,所以请参考你的开发文档。
时标只可以与其它TIMESTAMP类型的值相比较。
TIMESTAMP WITH TIME ZONE

用法:TIMESTAMP(精度)WITH TIME ZONE

时标部分符合上述TIMESTAWP的规则。
精度代表秒的小数部分。
时区部分的要求和TIME WITH TIME ZONE一样,即时区符合UTC规范,范围在-12:59到 +13:00之间。
总长度为25个字符,加上精度,加上一个精度分隔符:YYYY-MM-DD hh:mm:ss.p。
它只能与其它TIMESTAMP WITH TIME ZONE类型的数据进行比较。
Interval

Interval用于表示时间尺度。例如,你可以用操作符(将在下面进行解释)去计算两个日期间天数并加以保存。

各个公司在处理interval上有很大的不同——有些公司提供不同的度量单位,如年或者分钟,而有些公司在根本就不支持interval。SQL92标准的interval类型只提供一种子类型:INTERVAL。


INTERVAL

用法: INTERVAL (限定语)

有两种类型的interval:一种为“年份-月份”,即保存年份和月份(YYYY-MM);一种为“天-时间”(DD HH:MM:SS),用来保存天数、小时、分钟和秒。
限定语——在某些数据库中interval前导精度(lead precision)——根据其值来指示interval采用“年份-月份”还是“天-时间”方式。
interval可正可负。
当与其它interval类型变量相比较时,结果保持最大精度,如有必要则补零。
INTERVAL全部由整数组成,除了含有小数的秒之外。
“年份-月份”类型的interval变量只能与其它的“年份-月份”的interval变量进行比较。“天-时间”类型也与此类似。
操作符

操作结果类型

当处理日期时间时,时区保持不变——尽管有些数据库为了比较而将其中的一个时区转换为另一个。存在一些操作关键字,如OVERLAPS和EXTRACT,它们用于操作和比较datetime类型数据。然而,不同的数据库在这些操作关键字用法和支持方式上有着很大的不同。

OVERLAPS用于计算时间交叠的跨度,其操作对象可以是两个datetime也可以是一个datetime和一个interval。EXTRACT用于提取datetime或者interval类型数据的某个部分,如在DATA类型数据中提取月份。



使用数据类型
当你在数据库中创建了一个表格,你就定义了每列的名字以及要输入到这些列中的内容的数据类型。从先前的文章中借用一个例子:

CREATE TABLE Products
(prod_id INT(16)AUTO_INCREMENT, prod_color VARCHAR(20),
prod_descr VARCHAR(255), prod_size DECIMAL(8,2),
UNIQUE (`prod_id`));

在以上的查询中,定义行prod_color VARCHAR(20)发出指令要创建一个列,名字是prod_color,数据类型是VARCHAR,长度为20。

你的数据库使用和每个类型相关的描述符来区别数据类型。例如,VARCHAR数据类型的描述符所含的信息将它区别为串行数据型,它包含所有的串字符,其长度是可变的。数据库里列的定义还包含了其他信息,例如对应于数据类型的特定长度。

如前所述,每个数据库制造商都希望在SQL92定义的标准上建立自己的数据类型。这样每个数据库在定义数据类型时都能够设定自己所需要的最大容量限制和其他属性。许多数据库使用的数据类型名字和这里列出来的一样,尽管每种的实现方法都有微小的差别。要确定特定数据类型使用方法的细节最好的方法还是查阅数据库制造商的文档。

已经说过了,希望对标准字符串数据类型有更多的了解就往下看。



有两种主要的串行数据类型:字符和位。串行使用数据库里由SQL_TEXT所定义的字符。SQL_92标准同时还提供了NATIONAL CHARACTER(国家字符集)和NATIONAL CHARACTER VARYING(国家字符集变体),这两者都能使用可定义字符集。后者的处理方法和CHARACTER以及CHARACTER VARYING类型一样。

CHARACTER | CHAR
使用方法:CHARACTER(clength) | CHAR(clength)

CHARACTER和CHAR这两个关键字是相同的。
CHARACTER类型一个突出的特点是它们能够包含<space(空白)>这个字符。
CHARACTER 类型包含了固定长度的串字符(来自SQL_TEXT的语言集),clength。
<space> 字符在值的长度小于clength时起填充作用。这表示CHARACTER字段的长度是固定的。
你可以把CHARACTER的数据类型字段和相同类型的其他允许不同长度的字段比较,或者和CHARACTER VARYING 数据类型比较。
有些数据库允许和数值数据类型比较。
CHARACTER VARYING | CHAR VARYING | VARCHAR
使用方法:CHARACTER VARYING(maxlength) | CHAR VARYING(maxlength) | VARCHAR(maxlength)

CHARACTER VARYING,CHAR VARYING,和VARCHAR这几个关键字是相同的。
这些类型能容纳最大长度的字符串,maxlength。
数据库把字段的长度作为值的实际长度。
你可以把这些数据类型的字段和相同类型的其他允许不同最大长度的字段比较。
BIT

使用方法:BIT(blength)

这种类型包含了带有长度的位字符(1和0),blength。例如,如果我们使用BIT(2),样本值将为“01”。
有的数据库会在串的开头插入空位,其的则会填充它们以符合固定长度的要求。
位字符是串,不是整数。
你可以把BIT数据类型的字段与相同类型的允许不同长度的其它字段比较,或者和BIT VARYING数据类型比较。
有些数据库允许BITS和CHARACTER或者INTEGER类型比较。
BIT VARYING

使用方法: BIT VARYING(maxlength)

这种类型包含了最大长度的位字符,maxlength。
所记录的长度被设为值的实际长度。
数据库允许和其的BIT VARYING数据字段比较,或者和BIT的数据字段比较。
对我们的SQL系列有了一些了解了吗?

请把你的评论、问题或者回应发到下面的讨论栏,或者如果你有关于SQL基础系列的论题,可以发到我们编辑的信箱。

串理论
数据库生产商通过建立这些基础的数据类型来创建你实际要实现的数据类型。对于字符串,这就可能包括相同名字的(不同)类型,例如CHAR或BIT,或者扩展到包括TEXT,SMALL TEXT,以及包含字符串的其他数据类型。

数据从一个数据库迁移到另一个数据库时,这种设计上的弹性产生了一个必须克服的障碍。在一个数据库里,你可能会有一个叫做CHAR的类型,这个类型所允许的最大容量大于你要迁移到的数据库的最大容量。而且,(SQL92)标准中没有明确定义的类型可能会变化较大,这样的话只用遵从惯例来简化迁移。

from:asp学习网/title:sql数据类型 查询中的数据类型/ time:2007-10-18 2:00:46

本文主题数据类型

uniqueidentifier 数据类型

SQLServer2005中的增强数据类型VARCHAR(MAX)

怎样将Varbinary数据类型的数据转换成varchar型

SQL Server2005的XML数据类型之基础篇

SQL Server中易混淆的数据类型

SqlServer2000中使用用户自定义数据类型

VBScript 数据类型

asp教程 ©2006-2007 aspxuexi.com | 关于站点 | 版权隐私 | 站内搜索
复制或者翻版 请于夜间进行