日期时间类数据类型
日期,时间和时间戳数据类型通常是用来处理包含有日期和时间的数据,在方言3中支持所有的这3种数据类型,而方言1中仅有日期数据类型。日期数据类型在方言3中是"仅有日期",而方言1中日期数据类型存储了日期和时间,相于方言3中的时间戳数据类型,方言1中没有"仅有日期"类数据型。
备注
方言1中日期型数据能被当作时间戳数据类型来定义,这是推荐的新定义在方言1数据库中。
分数秒::如果分数秒存储在日期和时间数据类型,Firebrid将它们存储到1/10000秒。如果分数较低的粒度是首选,可以显式地指定为千分之一,百分之一或十分之一,在方言3的ODS 11或更高版本的数据库中。
关于子秒精度的一些有用的知识:
时间或时间戳的一部分是一个4字节的词,作为十分之一毫秒精度和时间值的空间,用于存储午夜以来经过的十分之一毫秒数从时间(时间戳)函数和变量中存储或读取实际精度值:
• CURRENT_TIME默认为秒精度,并可以指定到毫秒精度CURRENT_TIME (0|1|2|3)
• CURRENT_TIMESTAMP 为毫秒精度.通过CURRENT_TIMESTAMP (0|1|2|3)可以指定精度从秒到毫秒
• 文本 'NOW': 毫秒精度
• 函数 DATEADD()和 DATEDIFF()支持到毫秒精度,十分之一毫秒就可以指定,但他们四舍五入为最接近的整数执行任何操作之前
• EXTRACT()函数带上SECOND和MILLISECOND参数返回十分之一毫秒精度
• 对于 而言Firebird巧妙的接受到十分之一毫秒,但会截断(不舍)时间部分到最近的低位或相等毫秒。试一下例子,SELECT TIME
'14:37:54.1249' FROM rdb$database
• '+' 和 '-' 运算符以十分之一毫秒为单位工作,但仅在表达式中。只要被存储或是仅从RDB$DATABASE中选择,它会恢复到毫秒精度。十分之一毫秒的精度是罕见的,而不是普遍被存储在列或变量中。从所有这一切做出最佳的设想,虽然Firebird存储自午夜之后经过的时间和时间戳时间部分的十分之一毫秒(10-4 秒)数值,但从秒到毫秒实际精度可能会发生变化。
日期类型DATE
日期类型在方言3中仅有日期没有时间,存储数据的有效范围为01-01-0001 到 9999-12-31之间。
方言1中没有"仅有日期"类型。
提示
方言1中日期文本没有时间部分,除了'TODAY', 'YESTERDAY' 和 'TOMORROW'自动取得一个0时间部分外。
如果因为某些原因,显式存储一个方言1时间戳文本带有0时间部分对你很重要,引擎将接受像'25.12.2016 00:00:00.0000'形式的文本。然而,“25.12.2016”有同样的效果,用更少的按键!
时间类型TIME
时间数据类型仅在方言3有效,它所存储的时刻范围从00:00:00.0000到23:59:59.9999.
如果你需从方言1中的日期类型中获得时间部分,你可以用EXTRACT函数。
使用EXTRACT()函数的例子 :
EXTRACT (HOUR FROM DATE_FIELD)
EXTRACT (MINUTE FROM DATE_FIELD)
EXTRACT (SECOND FROM DATE_FIELD)
参阅EXTRACT()在题为内置函数与变量章节中
时间戳TIMESTAMP
时间戳类型数据在方言3和方言1中有效,它包括两个32位的字,日期部分和时间的一部分,以形成一个结构,存储日期和时刻。同方言1中的日期类型是一样的。
EXTRACT()函数功能同样地适用于时间戳以及方言1中的日期类型。