日期和时间值可以用几种格式表示,例如带引号的字符串或数字,具体取决于值的确切类型和其他因素。例如,在 MySQL 预期为日期的上下文中,它将 '2015-07-21'、'20150721' 和 20150721 中的任何一个解释为日期。标准 SQL 和 ODBC 日期和时间字面量。标准 SQL 要求使用类型关键字和字符串指定时间字面量。关键字和字符串之间的空格是可选的。DATE 'str'
TIME 'str'
TIMESTAMP 'str'
MySQL 可以识别,但与标准 SQL 不同,它不需要类型关键字。要符合标准的应用程序,时间字面量应该包含类型关键字。MySQL 还可以识别与标准 SQL 语法相对应的 ODBC 语法:{ d 'str' }
{ t 'str' }
{ ts 'str' }
MySQL 使用类型关键字和 ODBC 构造分别生成 DATE、TIME 和 DATETIME 值,如果指定,还包括后面的小数秒部分。TIMESTAMP 语法在 MySQL 中生成一个 DATETIME 值,因为 DATETIME 的范围更接近于标准 SQL TIMESTAMP 类型,其年份范围从 0001 到 9999(MySQL TIMESTAMP 的年份范围是 1970 年到 2038 年。)日期和时间上下文中的字符串和数字字面量。MySQL 识别以下格式的 DATE 值:● 'YYYY-MM-DD' 或 'YY-MM-DD' 格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31'、'2012/12/31'、'2012^12^31' 和 '2012@12@31' 是等价的。● 没有分隔符,形如 'YYYYMMDD' 或 'YYMMDD' 格式的字符串,假设字符串作为日期有意义。例如,'20070523' 和 '070523' 被解释为 '2007-05-23',但 '071332' 是非法的(它的月份和日期部分无意义),被当做 '0000-00-00' 对待。● YYYYMMDD 或 YYMMDD 格式的数字,假设数字作为日期有意义。例如,19830905 和 830905 被解释为 '1983-09-05'。MySQL可以识别以下格式的 DATETIME 和 TIMESTAMP 值:● 'YYYY-MM-DD hh:mm:ss' 或 'YY-MM-DD hh:mm:ss' 格式的字符串。这里也允许使用“宽松”语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,'2012-12-31 11:30:45'、'2012^12^31 11+30+45'、'2012/12/31 11*30*45' 和 '2012@12@31 11^30^45' 都是等价的。在日期和时间部分和小数秒部分之间唯一可以识别的分隔符是小数点。日期和时间部分可以用T而不是空格分隔。例如,'2012-12-31 11:30:45' '2012-12-31T11:30:45' 是等价的。● 'YYYYMMDDhhmmss' 或 'YYMMDDhhmmss' 格式没有分隔符的字符串,假设字符串作为日期有意义。例如,'20070523091528' 和 '070523091528' 被解释为 '2007-05-23 09:15:28',但 '071122129015' 是非法的(它的分钟部分无意义)并被当做 '0000-00-00 00:00:00' 对待。● YYYYMMDDhhmmss 或 YYMMDDhhmmss 格式的数字,假设数字作为日期有意义。例如,19830905132800 和 830905132800 被解释为 '1983-09-05 13:28:00'。DATETIME 或 TIMESTAMP 值可以包含精度高达微秒(6位)的小数秒部分。小数部分应始终与其余时间间隔一个小数点;无法识别其他小数秒分隔符。包含两位数年份值的日期不明确,因为世纪是未知的。MySQL 使用以下规则解释两位数的年份值:● 70-99 之间的年份值变为 1970-1999。● 00-69 之间的年份值变为 2000-2069。对于指定包含日期部分分隔符的字符串的值,不必为小于10的月或日值指定两位数字,'2015-6-9' 与 '2015-06-09' 相同。类似地,对于指定包含时间部分分隔符的字符串的值,不必为小于10的小时、分钟或秒值指定两位数字,'2015-10-30 1:2:3' 与 '2015-10-30 01:02:03' 相同。指定为数字的值的长度应为6、8、12或14位。如果数字长度为8或14位,则假定为 YYYYMMDD 或 YYYYMMDDhhmmss 格式,年份由前4位数字给出。如果数字长度为6或12位,则假定为 YYMMDD 或 YYMMDDhhmmss 格式,年份由前2位数字给出。不是这些长度的数字被解释为用前导零填充到最接近的长度。指定为非分隔字符串的值将根据其长度进行解释。对于长度为8或14个字符的字符串,年份由前4个字符给出。否则,年份由前2个字符给出。从左到右解释字符串以查找年、月、日、小时、分钟和秒值。这意味着不应该使用少于6个字符的字符串。例如,如果指定 '9903',认为它代表1999年3月,MySQL将其转换为“零”日期值。发生这种情况是因为年和月的值是99和03,但日部分完全丢失。但是,可以显式指定值0来表示缺少的月份或日期部分。例如,要插入值 '1999-03-00',请使用 '990300'。● 'D hh:mm:ss' 格式的字符串。还可以使用以下“宽松”语法:'hh:mm:ss'、'hh:mm'、'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。可以识别 'D hh:mm:ss.fraction'、'hh:mm:ss.fraction'、'hhmmss.fraction' 和 hhmmss.fraction 时间格式小数秒部分,其中小数部分精度高达微秒(6位数)。小数部分应始终与其余时间间隔一个小数点;无法识别其他小数秒分隔符。对于指定包含时间部分分隔符的字符串的 TIME 值,不必为小于10的小时、分钟或秒值指定两位数字 '8:3:2' 与 '08:03:02' 相同。https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html