- Date and Time Literals
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 位。
更多细节。
