1.日期和时间数据类型语法

用于表示时间值的日期和时间数据类型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR。

对于TIME, DATETIME和 TIMESTAMP值,MySQL支持小数秒,精度可达微秒(6位数)。要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_name是TIME、DATETIME或TIMESTAMP,fsp是小数秒精度。例如:

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

表中的任何TIMESTAMP或DATETIME列都可以自动初始化和更新:

●DATE

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

●DATETIME[(fsp)]

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

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

可以使用列定义子句DEFAULT为DATETIME列自动初始化到当前日期和时间,使用列定义子句ON UPDATE为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以来的秒数。它不能表示值'1970-01-01 00:00:00',因为这相当于0秒,而值0保留为表示'0000-00-00 00:00:00',TIMESTAMP的零值。

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

服务器处理TIMESTAMP定义的方式取决于explicit_defaults_for_timestamp系统变量值。

如果启用了explicit_defaults_for_timestamp,则不会自动将DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性分配给任何TIMESTAMP列。它们必须显式地包含在列定义中。此外,任何未显式声明为NOT NULL的TIMESTAMP都允许空值。

如果禁用explicit_defaults_for_timestamp,服务器将按如下方式处理TIMESTAMP:

除非另有指定,否则表中的第一个TIMESTAMP列定义为,如果未显式分配值,则自动设置为最近修改的日期和时间。这使得TIMESTAMP对于记录INSERT或UPDATE操作的时间戳非常有用。

如果TIMESTAMP列没有被定义为NULL,为它分配NULL值就相当于分配了当前日期和时间。

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

●TIME[(fsp)]

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

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

●YEAR[(4)]

四位数格式的年。MySQL以YYYY格式显示YEAR值,但允许使用字符串或数字将值分配给YEAR列。值显示范围从1901到2155,或者0000。

SUM()和AVG()聚合函数不能处理时间值。(它们将值转换为数字,将丢弃第一个非数字字符之后所有内容。)若要解决此问题,请转换为数字单位,执行聚合操作,然后转换回时间值。示例:

2.DATE、 DATETIME 和 TIMESTAMP类型

DATE、DATETIME 和 TIMESTAMP类型是相关的。本节介绍了它们的特点、相似之处和不同之处。MySQL可以识别多种格式的DATE、DATETIME和TIMESTAMP 值。

DATE类型用于具有日期但没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索并显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。

DATETIME类型用于同时包含日期和时间部分的值。MySQL以'YYYY-MM-DD hh:MM:ss'格式检索并显示DATETIME值。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

TIMESTAMP数据类型用于包含日期和时间部分的值。TIMESTAMP的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。

DATETIME或TIMESTAMP值可以包含小数秒部分,最高达微秒(6位)精度。特别是,插入DATETIME或TIMESTAMP列中的任何小数部分都将被存储而不是丢弃。包含小数部分时,这些值的格式为'YYYY-MM-DD hh:MM:ss[.fraction]',DATETIME值的范围为'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999',TIMESTAMP值的范围为'1970-01-01 00:00:01.000000'到'2038-01-19 03:14:07.999999'。小数部分应始终与其余时间用小数点分隔;不能用其他小数秒分隔符。

MySQL存储时将TIMESTAMP值从当前时区转换为UTC,检索时从UTC转换为当前时区。(其他类型(如DATETIME)不会发生这种情况。)默认情况下,每个连接的当前时区是服务器的时间。时区可以根据每个连接进行设置。只要时区设置保持不变,就可以得到存储的相同值。如果存储TIMESTAMP值,然后更改时区并检索该值,则检索到的值与存储的值不同。发生这种情况的原因是没有使用同一时区在两个方向上进行转换。可以从系统变量 time_zone 中得到当前时区。

从MySQL 8.0.19开始,在向表中插入TIMESTAMP和DATETIME值时,可以指定时区偏移量。偏移量被附加到日期时间后面(原文可能有误,具体参加最下方原始文档),不包含空格,并使用与设置 time_zone 系统变量相同的格式,但有以下例外情况:

●对于小于10的小时值,需要加前导零。

●不允许'-00:00'值。

●不能使用'EET'和'Asia/Shanghai'等时区名称;也不能使用'SYSTEM'。

此示例演示如何使用不同的时区设置将带有时区偏移的日期时间值插入TIMESTAMP和DATETIME列,然后检索它们:

查询结果中日期时间值不显示偏移量,即使在插入时使用了偏移量。

支持的偏移量范围为-14:00到+14:00(含)。

包含时区偏移量的日期时间字面值作为整体的参数值传入语句。

如果SQL模式允许,则无效的DATE、DATETIME和TIMESTAMP值将转换为对应类型的"零"值('0000-00-00'或'0000-00-00 00:00')。具体行为取决于是否启用了严格SQL模式或NO_ZERO_DATE SQL模式。

MySQL中日期值特定属性释义:

●MySQL允许对指定为字符串的值使用"宽松"格式,其中任何标点字符都可以用作日期部分或时间部分之间的分隔符。在某些情况下,这种语法可能具有欺骗性。例如,'10:11:12'这样的值因为 : 可能看起来像时间值,但如果在日期上下文中使用,则会被解释为'2010-11-12'。值'10:45:15'转换为'0000-00-00',因为'45'不是有效的月份。

日期和时间部分与小数秒部分之间唯一可识别的分隔符是小数点。

●服务器要求月和日的值是有效的,而不仅仅是分别在1到12和1到31之间。禁用严格模式时,无效日期(如'2004-04-31')将转换为'0000-00-00',并生成警告。启用严格模式时,无效日期将引发错误。若要允许此类日期,请启用 ALLOW_INVALID_DATES。

●MySQL不接受在日或月值是0的TIMESTAMP值或不是有效日期的值。如果SQL模式允许,则此规则的唯一例外是特殊的零值'0000-00-00 00:00:00'。具体的行为取决于是否启用了严格SQL模式和NO_ZERO_DATE SQL模式。

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

① 70-99之间的年份值将变为1970-1999。

② 00-69之间的年份值将变为2000-2069。

3.TIME 类型

MySQL以'hh:mm:ss'格式检索和显示TIME值(小时值数字大时用'hhh:mm:ss'格式)。TIME值的范围从'-838:59:59'到'838:59:59'。小时值可能很大,因为时间类型不仅可以用来表示一天中的某个时间(必须小于24小时),还可以表示经过的时间或两个事件的时间间隔(可能远远大于24小时,甚至为负)。

MySQL可以识别多种格式的TIME值,其中一些格式可以包含最高达微秒(6位)精度的小数秒部分。特别是,插入TIME列的值中的任何小数部分都将被存储而不是丢弃。包含小数部分时,TIME值的范围为'-838:59:59.000000'到'838:59:59.000000'。

将缩写值分配给TIME列时请务必当心。MySQL将带有冒号的缩写TIME值解释为一天中的时间。例如,'11:12'是指'11:12:00',而不是'00:11:12'。如果缩写值不含冒号,MySQL使用最右边的两个数字表示秒(即,这个时间是一段时间而不是一天中的某个时间)。例如,您可能认为'1112'和1112表示'11:12:00'(11点12分钟),但MySQL将其解释为'00:11:12'(11分钟12秒)。类似地,'12'和12被解释为'00:00:12'。

时间部分和小数秒部分之间唯一可识别的分隔符是小数点。

默认情况下,位于TIME范围之外但在其他情况下有效的值将被剪裁到范围的最近端点。例如,'-850:00:00'和'850:00:00'转换为'-838:59:59'和'838:59:59'。无效的TIME值转换为'00:00:00'。请注意,由于'00:00:00'本身是一个有效的TIME值,因此无法从存储在表中的'00:00:00'值判断原始值是指定为'00:00:00'还是一个无效值。

4.YEAR 类型

YEAR类型是一个1字节数据类型,用于表示年份值。它可以声明为隐式显示宽度为4个字符的年份,也可以显式声明显示宽度YEAR(4),和隐式声明效果是等同的。

从MySQL 8.0.19开始,不推荐使用具有显式显示宽度的YEAR(4)数据类型,并且在以后的MySQL版本中将删除对它的支持。请使用不带显示宽度的年份,其含义相同。

MySQL 8.0不支持旧版本MySQL中允许的2位数YEAR(2)数据类型。

MySQL以YYYY格式显示YEAR值,范围是1901到2155和0000。

YEAR接受多种格式的输入值:

●'1901'到'2155'范围内的4位字符串。

●1901到2155范围内的4位数字。

●'0'到'99'范围内的1位或2位字符串。MySQL将范围'0'到'69'和'70'到'99'的值分别转换为2000到2069和1970到1999之间的YEAR值。

●0到99范围内的1位或2位数字。MySQL将范围为1到69、70到99的值分别转换为范围为2001到2069和1970到1999的YEAR值。

插入数字0的结果的显示值为0000,内部值为0000。若要插入零并将其解释为2000,请将其指定为字符串'0'或'00'。

●YEAR可接受的函数返回结果,例如NOW()。

如果没有启用严格的SQL模式,MySQL会将无效的YEAR值转换为0000。在严格的SQL模式下,尝试插入无效的YEAR值会引发错误。

文章来源: blog.51cto.com,作者:数据杂货铺,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.51cto.com/15023289/2561177

mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)相关推荐

  1. MySQL之日期时间处理函数_MySQL之日期时间处理函数

    本文给大家分享的是MySQL之日期时间处理函数 ,非常的详细,也很实用,非常适合初学者,有需要的小伙伴参考下. 以下基本包含MySQL所有日期时间函数-- MySQL日期时间处理函数 -- 当前日期: ...

  2. mysql布尔数据类型_MySQL数据类型

    在本教程中,您将了解MySQL数据类型以及如何在MySQL中设计数据库时有效地使用它们. 数据库表包含具有特定数据类型(如数字或字符串)的多个列. MySQL提供更多的数据类型,而不仅仅是数字或字符串 ...

  3. mysql 中文的数据类型_mysql数据类型整理

    电脑的基本数据容量单位. 电脑的一个字节等于8位,也就是1byte=8bit. 字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符. bit中文名称是位 ...

  4. mysql 中文的数据类型_MySQL 数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  5. mysql 51cto 数据类型_MYSQL 数据类型 详解

    请问在数据类型里 1,char,nchar,nvarchar,varchar有什么区别? 2,text和ntext有什么区别以及和上面各种字符类有什么区别? 3,关于带big和带small的类型,比如 ...

  6. r如何查询mysql中的数据类型_MySQL数据类型 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  7. mysql 时间chuo格式化_mysql格式化日期

    mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间. 1. DATE_FORMAT() 函数用于以不同的格 ...

  8. 怎么将mysql的时间转为星期_Mysql的日期转换成星期[某天对应周几]

    |-- 应用中会有各种不同的需求,要灵活应对:比如拿到某一日期要知道是周几 |--DAYOFWEEK(date) [返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对 ...

  9. mysql php 时间比较大小_mysql中日期大小比较实例

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: select * from product where add_time = '2013-0 ...

最新文章

  1. linux进程间通信:FIFO实现进程间的双向通信
  2. canvas 嵌套_canvas初探
  3. 视觉SLAM总结——SVO中关键知识点总结
  4. pyinstaller打包exe程序教程推荐及需要注意的点
  5. 一段让人瑟瑟发抖的ABAP代码
  6. asp.net 日期转换
  7. 在Spring中使用@ResponseStatus获取Http状态
  8. php比例算法,图片比例转换算法
  9. 硕、博、 博后招生 | 加拿大卡尔加里大学智能空间信息实验室
  10. 求一个数的最大公约数
  11. Atom 编辑器安装 linter-eslint 插件,并配置使其支持 vue 文件中的 js 格式校验
  12. 技术分享PPT整理(一):Bootstrap基础与应用
  13. HTML创建简单动态时钟
  14. 面向初学者的 40 多个 Python 项目——开始编写 Python 代码的简单想法
  15. word中利用模糊替换
  16. 华为手机显示服务器异常怎么办,手机一直提示云服务器异常怎么办
  17. JQuery移动动画实现点击按钮切换图片--JQuery基础
  18. c++ MFC 根据屏幕分辨率变化自动调整控件位置和大小
  19. 初学Singleton单例模式
  20. KPM算法——数据结构|复习局|串|复杂模式匹配算法|二维数组解决KPM

热门文章

  1. 枚举生成MVC3: Bind Enum To DropDownList ?-java教程
  2. 服务器虚拟多台linux,VirtualBox环境下基于多台Ubuntu虚拟机的Hadoop分布式计算环境搭建...
  3. 金士顿 8G u盘 红色 量产记录
  4. windows环境下nginx的入门配置跳转tomcat
  5. Android 集成微信支付详解
  6. mac通过homebrew安装opensdk11
  7. 汇编64讲(搞免杀、破解必看)
  8. SQLServer常用系统视图
  9. html用变量存储颜色信息,我如何使用间隔循环修改HTML Canvas颜色?
  10. docker中的容器和镜像