9.1.3 日期和时间字面量


官方文档地址: 9.1.3 Date and Time Literals


字面量:在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。

ODBC:开放数据库连接(Open Database ConnectivityODBC)是为解决异构数据库间的数据共享而产生的,现已成为WOSAThe Windows Open System ArchitectureWindows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准。


日期和时间值可以用几种格式表示,比如带引号的字符串或数字,这取决于值的确切类型和其他因素。例如,在 MySQL 期望日期的情况下,它会将'2015-07-21''20150721',和20150721都作为日期解释。

本节描述日期和时间字面量的可接受格式。有关时态数据类型的更多信息,如允许值的范围,请参见 11.2 日期和时间数据类型

标准 SQL 和 ODBC 日期和时间字面量

标准 SQL 要求使用一个类型关键字和一个字符串指定时态字面量。关键字和字符串之间的空格是可选的。

DATE 'str'
TIME 'str'
TIMESTAMP 'str'

MySQL 可以识别,但是不像标准的 SQL,不需要类型关键字。符合标准的应用程序应该包含用于时态字面量的类型关键字。

MySQL 也能识别对应于标准 SQL 语法的 ODBC 语法:

{ d 'str' }
{ t 'str' }
{ ts 'str' }

MySQL 使用类型关键字和 ODBC 结构来生成DATETIMEDATETIME值,如果指定了,还包括末尾的小数秒部分。TIMESTAMP语法在 MySQL 中产生一个DATETIME值,因为DATETIME的范围更接近于标准 SQL 的TIMESTAMP类型,它的年份范围从00019999。(MySQL 的TIMESTAMP类型的年份范围是19702038。)

日期和时间上下文中的字符串和数字字面量

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'
  • 作为YYYYMMDDYYMMDD格式的数字,只要这个数字能作为一个日期。例如,19830905830905被解释为1983-09-05

MySQL 可以识别以下格式的DATETIMETIMESTAMP值:

  • 作为'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'

  • 作为YYYYMMDDhhmmssYYMMDDhhmmss格式的数字,只要这个数字能作为一个日期。例如,19830905132800830905132800被解释为'1983-09-05 13:28:00'

DATETIME或者TIMESTAMP可以包括末尾的小数秒部分,精度最高可达微秒(6位)。小数部分总是与其余部分用小数点隔开;不识别其他小数秒分隔符。有关 MySQL 中小数秒支持的信息,参见 11.2.6 时间值的小数秒

包含两位数年份值的日期不明确,因为世纪是未知的。MySQL 使用以下规则来解释两位数的年份值:

  • 年值在00-69的范围将被解释为2000-2069
  • 年值在70-99的范围将被解释为1970-1999

参见 11.2.8 两位数字的年份

对于为包含日期部分分隔符的字符串指定的值,不需要为小于 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 位,则假定该数字为YYYYMMDDYYYYMMDDhhmmss格式,年份由前 4 位给出。如果数字长度为 6 位或 12 位,则假定为YYMMDDYYMMDDhhmmss格式,年份由前两位给出。不属于这些长度之一的数字被解释为用前导 0 填充到最接近的长度。

指定为非分隔字符串的值将根据其长度进行解释。对于长度为 8 或 14 个字符的字符串,假设年份由前 4 个字符给出。否则,假定年份由前两个字符给出。该字符串从左到右进行解释,以查找年、月、日、小时、分钟和秒的值,以及字符串中存在的所有部分。这意味着你不应该使用少于 6 个字符的字符串。例如,如果你指定'9903',认为它代表19993月,MySQL 将会把它转换为"零"日期值。这是因为年和月的值分别是9903,但是日部分完全丢失了。但是,您可以显式地指定 0 值来表示缺少的月或日部分。如,要插入值'1999-03-00',请使用'990300'

MySQL 可以识别以下格式的TIME值:

  • 作为'D hh:mm:ss'格式的字符串。你也可以使用下面的一种“放松”语法:'hh:mm:ss''hh:mm''D hh:mm''D hh'或者'ss'。 这里D表示天数,值可以从034
  • 'hhmmss'格式中作为没有分隔符的字符串,前提是它作为时间有意义。例如,'101112'被理解为'10:11:12',但'109712'是非法的(它有一个无意义的分钟部分),将变为'00:00:00'
  • 作为hhmmss格式的数字,前提是它作为时间有意义。例如,101112被理解为'10:11:12'。以下格式也可以理解:ssmmsshhmmss

末尾的小数秒部分在'D hh:mm:ss.fraction''hh:mm:ss.fraction''hhmms .fraction''hhmmss.fraction'格式中被识别。其中fraction是精确到微秒(6位)的小数部分。小数部分总是与其余部分用小数点隔开;不识别其他小数秒分隔符。关于 MySQL 中对小数秒的支持,参见 11.2.6 时间值的小数秒

对于指定为包含时间部分分隔符的字符串的时间值,不需要为小于 10 的小时、分钟或秒值指定两位数字。'8:3:2''08:03:02'是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值