Date and Time Literals
Date 跟 Time 字面值有几种格式,例如用字符串表示,或者直接用数字表示。在 TiDB 里面,当 TiDB 期望一个 Date 的时候,它会把 '2017-08-24'
, '20170824'
,20170824
当做是 Date。
TiDB 的 Date 值有以下几种格式:
'YYYY-MM-DD'
或者'YY-MM-DD'
,这里的-
分隔符并不是严格的,可以是任意的标点符号。比如'2017-08-24'
,'2017&08&24'
,'2012@12^31'
都是一样的。唯一需要特别对待的是 ‘.’ 号,它被当做是小数点,用于分隔整数和小数部分。
Date 和 Time 部分可以被 ‘T’ 分隔,它的作用跟空格符是一样的,例如2017-8-24 10:42:00
跟2017-8-24T10:42:00
是一样的。'YYYYMMDDHHMMSS'
或者'YYMMDDHHMMSS'
,例如'20170824104520'
和'170824104520'
被当做是'2017-08-24 10:45:20'
,但是如果你提供了一个超过范围的值,例如'170824304520'
,那这就不是一个有效的 Date 字面值。YYYYMMDDHHMMSS
或者YYMMDDHHMMSS
注意这里没有单引号或者双引号,是一个数字。例如20170824104520
表示为'2017-08-24 10:45:20'
。
DATETIME 或者 TIMESTAMP 值可以接一个小数部分,用来表示微秒(精度最多到小数点后 6 位),用小数点 .
分隔。
Dates 如果 year 部分只有两个数字,这是有歧义的(推荐使用四个数字的格式),TiDB 会尝试用以下的规则来解释:
- year 值如果在
70-99
范围,那么被转换成1970-1999
。 - year 值如果在
00-69
范围,那么被转换成2000-2069
。
对于小于 10 的 month 或者 day 值,'2017-8-4'
跟 '2017-08-04'
是一样的。对于 Time 也是一样,比如 '2017-08-24 1:2:3'
跟 '2017-08-24 01:02:03'
是一样的。
在需要 Date 或者 Time 的语境下, 对于数值,TiDB 会根据数值的长度来选定指定的格式:
- 6 个数字,会被解释为
YYMMDD
。 - 12 个数字,会被解释为
YYMMDDHHMMSS
。 - 8 个数字,会解释为
YYYYMMDD
。 - 14 个数字,会被解释为
YYYYMMDDHHMMSS
。
对于 Time 类型,TiDB 用以下格式来表示:
'D HH:MM:SS'
,或者'HH:MM:SS'
,'HH:MM'
,'D HH:MM'
,'D HH'
,'SS'
,这里的 D 表示 days,合法的范围是0-34
。- 数值
HHMMSS
,例如231010
被解释为'23:10:10'
。 - 数值
SS
,MMSS
,HHMMSS
都是可以被当做 Time。
Time 类型的小数点也是 .
,精度最多小数点后 6 位。
更多细节。