• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 日期和时间数据类型语法

    日期和时间数据类型用于表示时间值DATETIMEDATETIMETIMESTAMP,和YEAR

    对于DATEDATETIME范围描述,“ supported ”表示尽管较早的值可能有效,但不能保证。

    MySQL允许对TIMEDATETIMETIMESTAMP值使用小数秒,精度最高为微秒(6位数)。要定义包含分数秒部分的列,使用语法,其中是,,或,并且是分数秒精度。例如:type_name(fsp)type_nameTIMEDATETIMETIMESTAMPfsp

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
    

    fsp如果给出值,则该值必须在0到6的范围内。值0表示没有小数部分。如果省略,则默认精度为0。(这与标准SQL默认值6不同,以便与以前的MySQL版本兼容。)

    任何TIMESTAMPDATETIME表中的列可以具有自动初始化和更新属性;请参见“ TIMESTAMP和DATETIME的自动初始化和更新”。

    • DATE

      一个约会。支持的范围是'1000-01-01''9999-12-31'。MySQL DATE以格式显示值,但允许使用字符串或数字将值分配给列。'YYYY-MM-DD'DATE

    • DATETIME[(fsp)]

      日期和时间组合。支持的范围是'1000-01-01 00:00:00.000000''9999-12-31 23:59:59.999999'。MySQL DATETIME以格式显示值,但允许使用字符串或数字将值分配给列。'YYYY-MM-DD hh:mm:ss[.fraction]'DATETIME

      可以fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。

      DATETIME可以使用DEFAULTON UPDATE列定义子句指定自动初始化和更新到列的当前日期和时间,如“ TIMESTAMP和DATETIME的自动初始化和更新”中所述。

    • TIMESTAMP[(fsp)]

      时间戳记。范围是'1970-01-01 00:00:01.000000'UTC到'2038-01-19 03:14:07.999999'UTC。TIMESTAMP值存储为自纪元('1970-01-01 00:00:00'UTC)以来的秒数。甲TIMESTAMP不能代表值'1970-01-01 00:00:00',因为这是等同于从所述历元和值00秒被保留用于表示'0000-00-00 00:00:00',该“零”TIMESTAMP值。

      可以fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。

      服务器处理TIMESTAMP定义的方式取决于explicit_defaults_for_timestamp系统变量的值(请参见“服务器系统变量”)。

      如果explicit_defaults_for_timestamp启用,则不会自动将DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP属性分配给任何TIMESTAMP列。它们必须明确包含在列定义中。同样,任何TIMESTAMP未明确声明为NOT NULL允许NULL值的值。

      如果explicit_defaults_for_timestamp被禁用,则服务器处理TIMESTAMP如下:

      除非另有说明,否则TIMESTAMP如果未明确分配值,则表中的第一列被定义为自动设置为最近修改的日期和时间。这TIMESTAMP对于记录“INSERT或”UPDATE操作的时间戳很有用。您也可以TIMESTAMP通过为其分配NULL值来将任何列设置为当前日期和时间,除非已使用NULL允许NULL值的属性对其进行了定义。

      可以使用DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP列定义子句指定自动初始化和更新到当前日期和时间。默认情况下,第一TIMESTAMP列具有这些属性,如前所述。但是,TIMESTAMP可以将表中的任何列定义为具有这些属性。

    • TIME[(fsp)]

      一次范围是'-838:59:59.000000''838:59:59.000000'。MySQL TIME以格式显示值,但允许使用字符串或数字将值分配给列。'hh:mm:ss[.fraction]'TIME

      可以fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。

    • YEAR[(4)]

      一年的4位数格式。MySQL YEARYYYY格式显示值,但允许YEAR使用字符串或数字将值分配给列。值显示为190121550000

      有关YEAR显示格式和输入值解释的更多信息,请参见“YEAR 类型”。

      注意

      从MySQL 8.0.19开始,不建议YEAR(4)使用具有显式显示宽度的数据类型,并且在将来的MySQL版本中将不再支持该数据类型。而是,使用YEAR不具有相同含义的显示宽度。

      MySQL 8.0不支持YEAR(2)旧版本MySQL中允许的两位数数据类型。有关转换为4位的指令YEAR,请参见两位数年份(2)的限制和迁移到4位数年份中的MySQL 5.7参考手册。

    SUM()AVG()聚合函数不具有时间价值的工作。(它们将值转换为数字,第一个非数字字符后会丢失所有内容。)要解决此问题,请转换为数字单位,执行合计运算,然后转换回时间值。例子:

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
    SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;