日期和时间类型 | 格式 | 范围 | 大小(字节) |
DATE | YYYY-MM-DD | ‘1000-01-01’到‘9999-12-31’ | 3 |
DATETIME | YYYY-MM-DD HH:MM:SS | ‘1000-01-01 00:00:00’到 ‘9999-12-31 23:59:59’ | 5+秒精度存储(实际存储:8字节) |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | ‘1970-01-01 00:00:00’到 ‘2037-12-31 23:59:59’ | 4+秒精度存储(实际存储:8字节 |
TIME | HH:MM:SS | ‘-838:59:59’到‘838:59:59’ | 3+秒精度存储(实际存储:6字节) |
YEAR | YYYY(默认格式) | ‘1901到2155’和‘0000’ | 1 |
YY | ‘70到69’,表示从1970年到2069年。 |
‘2012^12^32’
‘20070523’
‘070523’
‘071332’
19830905
830905
DEFAULT CURRENT_TIMESTAMP,ON UPDATE CURRENT_TIMESTAMP 子句
用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句,列默认使用当前的时间戳,并且自动更新;如果默认值设定为其他值(如0或NULL),则不会自动更新时间戳。
TIME
TIME[(fsp)]
时间。范围是 ‘-838:59:59.000000’到‘838:59:59.000000’。以‘HH:MM:SS[.fraction]’格式显示TIME值,但允许使用字符串或数字为TIME列分配值。fsp参数是表示秒精度,取值范围为:0-6。默认值取0;最大值为6,表示精确到微妙。
‘D HH:MM:SS[.fraction]’格式的字符串。还可以使用下面任何一种“非严格”语法:‘H:MM:SS[.fraction]’、‘HH:MM:SS’、‘HH:MM’、‘D HH:MM:SS’、‘D HH:MM’、‘D HH’或‘SS’。这里D表示日,可以取0到34之间的值。
‘HHMMSS’格式的没有间割符的字符串,假定是有意义的时间。例如,‘101112’被理解为‘10:11:12’,但‘109712’是不合法的(它有一个没有意义的分钟部分),将变为‘00:00:00’。
HHMMSS格式的数值,假定是有意义的时间。例如,101112被理解为‘10:11:12’。下面格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。
函数返回的结果,其值适合TIME上下文,例如CURRENT_TIME。
对于指定为包括时间部分间割符的字符串的TIME值,如果时、分或者秒值小于10,则不需要指定两位数。‘8:3:2’与‘08:03:02’相同。
为TIME列分配简写值时应注意。没有冒号,解释值时假定最右边的两位表示秒。(解释TIME值为过去的时间而不是当天的时间)。例如,你可能认为‘1112’和1112表示‘11:12:00’(11点过12分),系统中将它们解释为‘00:11:12’(11分,12 秒)。同样,‘12’和12 被解释为 ‘00:00:12’。相反,TIME值中使用冒号则肯定被看作当天的时间。也就是说,‘11:12’表示‘11:12:00’,而不是‘00:11:12’。
超出TIME范围但合法的值被裁为范围最接近的端点。例如,‘-850:00:00’和‘850:00:00’被转换为‘-838:59:59’和‘838:59:59’。
无效TIME值被转换为‘00:00:00’。请注意由于‘00:00:00’本身是一个合法TIME值,只从表内保存的一个‘00:00:00’值还不能说出原来的值是 ‘00:00:00’还是不合法的值。
YEAR
两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。以YYYY 格式显示YEAR值,但允许使用字符串或数字为YEAR列分配值。
可以指定各种格式的YEAR值:
四位字符串,范围为‘1901’到‘2155’。
四位数字,范围为1901到2155。
两位字符串,范围为‘00’到‘99’。‘00’到‘69’和‘70’到‘99’范围的值被转换为2000到2069和1970到1999范围的YEAR值。
两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。你必须将它指定为一个字符串‘0’或‘00’或它被解释为0000。
函数返回的结果,其值适合YEAR上下文,例如NOW()。
非法YEAR值被转换为0000。
对于DATETIME、DATE、TIMESTAMP和YEAR类型,OceanBase使用以下规则解释含模糊年值的日期:
00-69范围的年值转换为2000-2069。
70-99范围的年值转换为1970-1999。
ORDER BY可以正确排序有两位年的TIMESTAMP或YEAR值。
部分函数如MIN()和MAX()将TIMESTAMP或YEAR转换为一个数字。这说明使用有两位年值的值,这些函数不能工作正确。在这种情况下的修复方法是将TIMESTAMP或YEAR转换为四位年格式或使用MIN(DATE_ADD(TIMESTAMP,INTERVAL 0 DAYS))。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。