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:002017-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'
  • 数值 SSMMSSHHMMSS 都是可以被当做 Time。

Time 类型的小数点也是 .,精度最多小数点后 6 位。

更多细节