时间数据类型
数据库中时间数据类型可分为:日期、时间、日期时间、时间戳以及时间间隔数据类型。
日期类型
DATE
存储年、月、日,支持范围为0001-01-01至9999-12-31。
时间类型
- TIME
- TIME WITH TIME ZONE
存储时、分、秒、毫秒[、时区],时间支持范围为00:00:00至23:59:59,时区支持-12至+14。
日期时间类型
- DATETIME
- DATETIME WITH TIME ZONE
存储年、月、日、时、分、秒、毫秒[、时区],年、月、日支持范围与日期类型一致,时、分、秒支持范围与时间类型一致,时区支持范围与时间类型一致。
时间戳类型
- TIMESTAMP
- TIMESTAMP WITH TIME ZONE
存储年、月、日、时、分、秒、毫秒[、时区],支持范围与日期时间类型一致,时间戳类型默认插入当前系统时间,可根据需求设置记录变更时自动变更该行数据时间戳(AUTO UPDATE)。
时间间隔类型
INTERVAL数据类型用来存储两个时间戳之间的时间间隔,各类型和所占空间如下表:
类型 | 占用字节 | 最大精度 | 最大标度 |
---|---|---|---|
INTERVAL YEAR | 4 | 9 | - |
INTERVAL MONTH | 4 | 9 | - |
INTERVAL DAY | 4 | 9 | - |
INTERVAL HOUR | 4 | 9 | - |
INTERVAL MINUTE | 4 | 9 | - |
INTERVAL SECOND | 8 | 6 | - |
INTERVAL YEAR TO MONTH | 4 | 8 | - |
INTERVAL DAY TO HOUR | 4 | 7 | - |
INTERVAL DAY TO MINUTE | 4 | 6 | - |
INTERVAL DAY TO SECOND | 8 | 7 | 6 |
INTERVAL HOUR TO MINUTE | 4 | 7 | - |
INTERVAL HOUR TO SECOND | 8 | 7 | 6 |
INTERVAL MINUTE TO SECOND | 8 | 7 | 6 |
时间字段可取值范围
时间字段 | 时间类型有效值 | 时间间隔类型有效值 |
---|---|---|
YEAR | 1至9999 | 0至999,999,999 |
MONTH | 01至12 | 0至11 |
DAY | 01至31 | 01至31 |
HOUR | 00至23 | 0至23 |
MINUTE | 00至59 | 0至59 |
SECOND | 00至59.999(精确到小数点后三位),不适用于DATE类型 | 0至59.999999(SIZE),SIZE最大精度为6 |
数据类型特性表
数据类型 | 长度 | Java数据类型 | 长度 | 封装器类 | 说明 |
---|---|---|---|---|---|
DATE | 4Byte | java.sql.Date | 4字节(32位) | Date | 格式:YYYY-MM-DD,表示范围公元前'9999-12-31 BC'到'0002-01-01 BC'以及公元后'0001-01-01'到'9999-12-31'。 使用字符串或TO_DATE函数赋值,公元前、公元后日期分别以BC和AD表示,位于时间字符串末尾。 Oracle兼容模式时,DATE类型映射为DATETIME类型。 |
DATETIME | 8Byte | java.sql.Timestamp | 8Byte | Timestamp | 格式:YYYY-MM-DD HH24:MI:SS,支持的范围是公元前'9999-12-31 23:59:59.999 BC'到'0002-01-01 00:00:00.000 BC'以及公元后'0001-01-01 00:00:00.000'到'9999-12-31 23:59:59.999'。 使用字符串或TO_DATE函数赋值公元前、公元后日期分别以BC和AD表示,位于时间字符串末尾。 秒值存储精度为小数点后三位。 |
TIMESTAMP[(SIZE)] | 8Byte | java.sql.Timestamp | 8字节(64位) | Timestamp | 格式:YYYY-MM-DD HH24:MI:SS,支持的范围是公元前'9999-12-31 23:59:59.999 BC'到'0002-01-01 00:00:00.000 BC'以及公元后'0001-01-01 00:00:00.000'到'9999-12-31 23:59:59.999'。 使用字符串或TO_DATE函数赋值,公元前、公元后日期分别以BC和AD表示,位于时间字符串末尾。 SIZE为存储秒值小数部分位数,默认为3,可选值为0到6。 注:数据库只支持到秒值小数精度后三位。 |
DATETIME WITH TIME ZONE | 10Byte | java.lang.String | 变长 | String | DATETIME WITH TIME ZONE值包含年、月、日、小时、分钟、秒、秒的小数部分,以及在协调通用时间(Coordinated Universal Time,UTC)前后的分钟数。 小数存储到3个小数位,其中时区的取值范围为:-12:59 ~ +14:59。 |
TIMESTAMP[(SIZE)] WITH TIME ZONE | 10Byte | java.lang.String | 变长 | String | TIMESTAMP WITH TIME ZONE值包含年、月、日、小时、分钟、秒、秒的小数部分,以及在协调通用时间(Coordinated Universal Time,UTC)前后的分钟数。 小数存储到3个小数位。其中时区的取值范围为:-12:59 ~ +14:59。 |
TIME | 4Byte | java.sql.Time | 4Byte | Time | 格式:HH24:MI:SS,支持的范围是'00:00:00'到'23:59:59'。 秒值存储精度为小数点后三位。 |
TIME WITH TIME ZONE | 6Byte | java.lang.String | 变长 | String | 格式:HH24:MI:SS +UTC,支持的范围是'00:00:00.000'到'23:59:59.999'。 秒值存储精度为小数点后三位,包含时区(UTC信息),其中时区的取值范围为:-12:59 ~ +14:59。 |
INTERVAL YEAR[(SIZE)] | 4Byte | java.lang.String | 变长 | String | 包含年的时间间隔类型。 SIZE是年字段的数字位数,最大精度为9位,取值范围从1至9,SIZE默认值:9,超过SIZE定义范围,报错,无法插入数据,取值范围从0到999999999。 |
INTERVAL MONTH[(SIZE)] | 4Byte | java.lang.String | 变长 | String | 包含月的时间间隔类型。 SIZE是月字段的数字位数,最大精度为9位,取值范围从1至9,SIZE默认值:9,超过SIZE定义范围,报错,无法插入数据,取值范围从0到999999999。 |
INTERVAL DAY[(SIZE)] | 4Byte | java.lang.String | 变长 | String | 包含日的时间间隔类型。 SIZE是月字段的数字位数,最大精度为9位,取值范围从1至9,SIZE默认值:9,超过SIZE定义范围,报错,无法插入数据,取值范围从0到999999999。 |
INTERVAL HOUR[(SIZE)] | 4Byte | java.lang.String | 变长 | String | 包含小时的时间间隔类型。 SIZE是小时字段的数字位数,最大精度为9位,取值范围从1至9,SIZE默认值:9,超过SIZE定义范围,报错,无法插入数据,取值范围从0到999999999。 |
INTERVAL MINUTE[(SIZE)] | 4Byte | java.lang.String | 变长 | String | 包含分钟的时间间隔类型。 SIZE是分钟字段的数字位数,最大精度为9位,取值范围从1至9,SIZE默认值:9,超过SIZE定义范围,报错,无法插入数据,取值范围从0到999999999。 |
INTERVAL SECOND([(P)], [(S)]) | 8Byte | java.lang.String | 变长 | String | 包含秒的时间间隔类型。 P是秒字段的数字位数,取值范围从1至9。 S为微秒表示精度,取值范围从1至6,默认值:9、6。 |
INTERVAL YEAR[(SIZE)] TO MONTH | 4Byte | java.lang.String | 变长 | String | 包含年、月的时间间隔类型。 SIZE是年表示数字位数,取值范围从1至8,SIZE默认值:8,YEAR取值范围从0到99999999,MONTH取值范围从0到11。 |
INTERVAL DAY[(SIZE)] TO HOUR | 4Byte | java.lang.String | 变长 | String | 包含日、小时的时间间隔类型。 SIZE是日表示数字位数,取值范围从1至7,SIZE默认值:7,DAY取值范围从0到999999,HOUR取值范围从0到23。 |
INTERVAL DAY[(SIZE)] TO MINUTE | 4Byte | java.lang.String | 变长 | String | 包含日、分钟的时间间隔类型。 SIZE是日表示数字位数,取值范围从1至6,SIZE默认值:6,DAY取值范围从0到99999,HOUR取值范围从0到23,MINUTE取值范围从0到59,最大值:’999999 23:59’。 |
INTERVAL DAY[(P)] TO SECOND[(S)] | 8Byte | java.lang.String | 变长 | String | 包含日、秒的时间间隔类型。 P是日表示的数字位数,取值范围从1至6,DAY取值范围从0到99999,HOUR取值范围从0到23,MINUTE取值范围从0到59,SECOND取值范围从0到59。 S为微秒表示精度,取值范围从1至6,默认值:6、6,最大值:’999999 23:59:59.999999’。 |
INTERVAL HOUR[(SIZE)] TO MINUTE | 4Byte | java.lang.String | 变长 | String | 包含小时、分钟的时间间隔类型。 SIZE是小时数字位数,最大精度为7,SIZE默认值:7,SIZE取值范围从0到9999999,MINUTE取值范围从0到59,最大值:’9999999:59’。 |
INTERVAL HOUR[(P)] TO SECOND[(S)] | 8Byte | java.lang.String | 变长 | String | 包含时、秒的时间间隔类型。 P是小时表示的数字位数,取值范围从1至7,HOUR取值范围从0到9999999, MINUTE取值范围从0到59,SECOND取值范围从0到59。 S为微秒表示精度,取值范围从1至6,默认值:7、6。最大值:’9999999:59:59.999999’。 |
INTERVAL MINUTE[(P)] TO SECOND[(S)] | 8Byte | java.lang.String | 变长 | String | 包含分、秒的时间间隔类型。 P是分钟表示的数字位数,取值范围从1至7,MINUTE取值范围从0到9999999,SECOND取值范围从0到59。 S为微秒表示精度,取值范围从1至6,默认值:7、6,最大值:’9999999:59.999999’。 |