datetime和interval是两种与时间有关的数据类型它们的作用体现在以下几个方面创建或者更改记录库中的某条记录当某个时间发生时运行记录或者计算某个datetime变量建立后所经历过的时间本文将介绍SQL标准对上述两种数据类型的描述
SQL数据类型
如果你想进一步了解SQL数据类型请阅读SQL基础字符串型数据类型这篇文章的范围覆盖了SQL中的通用数据类型并说明了各种字符串数据类型的用法SQL基础数字数据类型详细介绍了数字数据类型
Datetime
用于表示时间或者日期的数据类型都属于datetime类型每一种datetime数据类型都有他自己的用于获取值的长度和它所保存信息的手段如天月分钟秒秒的小数等等
实际上datetime的实现形式随着定义它的标准不同而拥有不同的长度和格式然而各个公司定义的类型都内在地符合下述规则举例来说时标(timestamp)的某个实现可能没有分隔符随着细节的规范不同长度和格式也发生变化在某些场合以空格做为间隔符Datetime数据类型包括DATATIME和TIMESTAMP让我们仔细研究这些分类首先我们看看DATA
DATA
用法DATA
DATA类型允许没有参数如精度
DATA的字段包括年月和日
DATA的长度为十个字符 YYYYMMDD(Y表示年M表示月D表示日)
它只允许与其它DATA类型字段相比较
允许的数字必须符合公历的规范
TIME
用法TIME(精度)
该类型包含了小时分和秒格式为hh:mm:ss(h表示小时m表示分s表示秒)
精度可选择(……)
时间以世界标准时间(Universal Coordinated TimeUTC)为准即::表示格林威治的午夜服务器的时区隐含的
如果不需要秒的小数部分那么TIME的长度为八个字符否则就是八位长度在加上精度hh:mm:ssp
它只能与其它TIME类型数据进行比较
如果没有指定精度精度默认为
TIME WITH TIME ZONE
用法TIME (精度) WITH TIME ZONE
这个值要符合TIME数据类型
TIMEZONE部分表示相对UTC的时差::+hh:mm它的范围为:到:
精度表示秒的小数部分
带有TIMEZONE的TIME长度为个字符加上精度在加上一个分隔符
只可以与带有TIMEZONE的TIME类型数据进行比较
TIMESTAMP
用法TIMESTAMP(精度)
该类型包含有年月日时分秒格式为YYYYMMDD hh:mm:ss
可以包括秒的小数部分这由定义的精度决定
它的日期部分符合公历标准时间部分为UTC格式默认为当地时区
时标的长度为个字符加上精度在加上精度分隔符
许多系统偏离上述定义的长度如UNIX风格时标格式为YYYYMMDD hh:mm:ssp
如果没有定义精度默认值为但是许多数据库公司默认为所以请参考你的开发文档
时标只可以与其它TIMESTAMP类型的值相比较
TIMESTAMP WITH TIME ZONE
用法TIMESTAMP(精度)WITH TIME ZONE
时标部分符合上述TIMESTAWP的规则
精度代表秒的小数部分
时区部分的要求和TIME WITH TIME ZONE一样即时区符合UTC规范范围在:到 +:之间
总长度为个字符加上精度加上一个精度分隔符YYYYMMDD hh:mm:ssp
它只能与其它TIMESTAMP WITH TIME ZONE类型的数据进行比较
Interval
Interval用于表示时间尺度例如你可以用操作符(将在下面进行解释)去计算两个日期间天数并加以保存
各个公司在处理interval上有很大的不同——有些公司提供不同的度量单位如年或者分钟而有些公司在根本就不支持intervalSQL标准的interval类型只提供一种子类型INTERVAL
INTERVAL
用法 INTERVAL (限定语)
有两种类型的interval一种为年份-月份即保存年份和月份(YYYYMM)一种为天-时间(DD HH:MM:SS)用来保存天数小时分钟和秒
限定语——在某些数据库中interval前导精度(lead precision)——根据其值来指示interval采用年份-月份还是天-时间方式
interval可正可负
当与其它interval类型变量相比较时结果保持最大精度如有必要则补零
INTERVAL全部由整数组成除了含有小数的秒之外
年份-月份类型的interval变量只能与其它的年份-月份的interval变量进行比较天-时间类型也与此类似
操作符
操作结果类型
当处理日期时间时时区保持不变——尽管有些数据库为了比较而将其中的一个时区转换为另一个存在一些操作关键字如OVERLAPS和EXTRACT它们用于操作和比较datetime类型数据然而不同的数据库在这些操作关键字用法和支持方式上有着很大的不同
OVERLAPS用于计算时间交叠的跨度其操作对象可以是两个datetime也可以是一个datetime和一个intervalEXTRACT用于提取datetime或者interval类型数据的某个部分如在DATA类型数据中提取月份
数据类型
由于已建立的标准是为了各公司在现有基础上实现实际上的数据类型的因此在具体限制参数和数据类型等方面你还是需要经常参考你的数据库文档