最近在看《MySQL技术内幕:SQL编程》并做了笔记,这是一篇笔记类型博客,分享出来方便自己复习,也可以帮助其他人

一、日期时间类型所占空间对比

各种日期时间数据类型所占的空间:

类型 所占空间
DATETIME 8字节
DATE 3字节
TIMESTAMP 4字节
YEAR 1字节
TIME 3字节

二、DATETIME和DATE对比

  • DATETIME占用8字节,既显示了日期也显示时间,可以表示的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59”
  • DATE占用3字节,只显示日期,不显示具体时间,可显示的日期范围为“1000-01-01”到“9999-12-31”

ok,这里特意介绍一下TIMESTAMP秒的小数部分问题

备注:5.6.4+版本才支持秒的小数部分,之前版本是不支持的

# 查询MySQL版本
select version();
# 建表验证问题
create table t (a datetime);
# 写数据秒后面加上小数
insert into t select '2019-10-11 17:16:12.55555';
# 查询,发现并没有查出秒之后的小数
select * from t ;
# 使用microsecond,读取秒之后的小数
select microsecond('2019-10-11 17:16:12.55555') ;
# CAST读取,验证了5.7+版本查询时候会出现四舍五入,如下sql得到2019-10-11 17:16:12,而低版本就不会
SELECT CAST('2019-10-11 17:16:12.5555' AS DATETIME) ;
# CAST读取,5.7+版本查询,四舍五入得到,2019-10-11 17:16:12,低版本正常显示,具体哪个版本开始的不知道,我在5.7+版本验证都是会出现四舍五入的情况
select cast('2019-10-11 17:16:12.1234' as datetime) ;
# 5.6.4+版本支持秒的小数部分
# 支持的类型有TIME、DATETIME、TIMESTAMP,写法是type(size),size为小数部分精度,最大为6
# 删表,再验证一下
DROP TABLE t;
# 这里指定精度
CREATE TABLE t (a DATETIME(4));
# 秒后加小数,写数据
INSERT INTO t SELECT '2019-10-11 17:16:12.55555';
# 查询,发现可以正常写数据,不过精度只有4
SELECT * FROM t ;

三、TIMESTAMP类型介绍

TIMESTAMP占4个字节,显示的范围为“1970-01-01”UTC 到 “2038-01-19 03:14:07”UTC

备注:UTC:协调世界时间、又称世界统一时间、世界标准时间和国际协调时间

注意:

  • 更新表时,可以设置TIMESTAMP类型的列,自动更新时间为当前时间
  • 列为TIMESTAMP的日期类型可以设置一个默认值,而DATETIME不支持

例子,验证一下,设置默认值和自动更新时间

# 新增一张表
CREATE TABLE t (
a INT,
b TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE = INNODB ;
# 写一条数据
INSERT INTO t (a) VALUES (1);
# 查询,发现自动赋默认值时间
SELECT * FROM t;

验证自动更新时间问题

# 修改字段为自动更新(数据有改变时候才会自动更新)
ALTER TABLE t MODIFY COLUMN b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
# 删一下表数据
DELETE FROM t;
# 写初始化数据
INSERT INTO t SELECT 1,CURRENT_TIMESTAMP;
# 查询,先记录下原来时间
SELECT * FROM t;


# 修改数据
UPDATE t SET a =2;
# 如果修改为1,是不会改变时间的
SELECT * FROM t;

四、YEAR和TIME类型对比

  • YEAR类型占用1字节,书中介绍定义时可以指定显示的宽度为YEAR(2)或者YEAR(4),不过在我的mysql版本5.7+验证,发现只能定义为YEAR或者YEAR(4),也就是新版是不支持YEAR(2)这种形式的

    对于YEAR(4),其显示年份的范围为1901~2155;然后超过这个范围的话,mysql还可以写,不过被赋值为0000
  • TIME类型只占3字节,显示的范围为“-838:59:59”~"838:59:59",TIME的小时是可以大于23也可以为负值的,因为time也可以用来保存时间间隔

五、日期时间函数

  • NOW、CURRENT_TIMESTAMP和SYSDATE函数

介绍一下MySQL比较常用的NOW、CURRENT_TIMESTAMP和SYSDATE函数

给个例子,用sleep函数,然后对比sleep函数执行前后,这几个函数获取的时间对比

SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE(),SLEEP(2),NOW(),CURRENT_TIMESTAMP(),SYSDATE();



从图对比可知,NOW()其实就是CURRENT_TIMESTAMP()的近意函数,例子里使用了sleep(2),隔2秒继续执行,可以对比得知,NOW、CURRENT_TIMESTAMP其实获取的都是整条sql开始执行的时间,不管在sleep函数执行前后,而SYSDATE获取的其实执行sysdate这个函数时候的时间,并非整条sql开始执行的时间,所以在sleep函数执行前后获取的时间是不同的

  • DATE_ADD和DATE_SUB函数

DATE_ADD(date , INTERVAL expr type)和DATE_SUB(datte , INTTERVAL expr type),expr可以为负数,所以DATE_ADD既可以用于日期相加,也可以用于日期相减。type可以为YEAR、MONTH、DAY、HOUR、MINUTE、SECOND

SELECT NOW()AS NOW,DATE_ADD(NOW(),INTERVAL 1 DAY) AS tomorrow,DATE_SUB(NOW(),INTERVAL 1 DAY);

备注:闰月问题,如果是闰月就返回29日,不是闰月就返回28日

SELECT DATE_ADD('2004-2-29',INTERVAL 1 YEAR);
SELECT DATE_ADD('2004-2-29',INTERVAL 4 YEAR);



  • DATE_FORMAT函数

    DATE_FROMAT和Oracle中的to_char功能有点类型,作用是按照用户定义的格式打印数据
SELECT DATE_FORMAT(NOW(),'%Y%m%d');

MySQL日期和时间类型笔记的更多相关文章

  1. mysql日期和时间类型

    TIME 类型 TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节.格式为 HH:MM:SS.HH 表示小时,MM 表示分钟,SS 表示秒. TIME 类型的取值范围为 -838:59:5 ...

  2. MySQL数据类型--日期和时间类型

    MySQL中的多种时间和格式数据类型 日期和时间类型是为了方便在数据库中存储日期和时间而设计的.MySQL中有多种表示日期和时间的数据类型. 其中,year类型表示时间,date类型表示日期,time ...

  3. mysql的五种日期和时间类型【转载】

    [mysql的五种日期和时间类型] mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期 ...

  4. 第二章 Mysql 数据类型简介--(整数类型、浮点数类型和定点数类型,日期与时间类型,字符串类型,二进制类型)

    第一节:整数类型.浮点数类型和定点数类型 1,整数类型 2,浮点数类型和定点数类型 M 表示:数据的总长度(不包括小数点):D 表示:小数位:例如 decimal(5,2) 123.45存入数据的时候 ...

  5. MySQL 日期、时间转换函数

    MySQL 日期.时间转换函数:date_format(date,format), time_format(time,format) 能够把一个日期/时间转换成各种各样的字符串格式.它是 str_to ...

  6. PHPExcel对于Excel中日期和时间类型的处理

    PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...

  7. SQL Server的日期和时间类型

    Sql Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1,秒的精度是指使用多少位小数表示秒 DateTime数据类型秒的精度是3,D ...

  8. SQL 中的日期和时间类型

    在我们SQL中一般支持三种数据类型. date:日历日期,包括年(四位),月和日. time: 一天中的时间,包括小时,分和秒.可以用变量time(p)来表示秒的小数点后的数字位数(默认是0). 通过 ...

  9. 【MSSQL】SQL Server的日期和时间类型

    参考:SQL Server的日期和时间类型 SQL Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1.秒的精度 秒的精度是指TSQL ...

随机推荐

  1. mybatis foreach批量处理

    ---恢复内容开始--- http://blog.csdn.net/jiesa/article/details/52185617 foreach属性 属性 描述 item 循环体中的具体对象.支持属性 ...

  2. 【Redis】缓存穿透与缓存雪崩

    一.缓存雪崩 1.1 缓存雪崩产生的原因 1.2 解决方案 1.3 锁的方式 1.4 消息中间件 1.5 一级和二级缓存 1.6 均摊分配redis key 失效时间 二.缓存穿透 一.缓存雪崩 1. ...

  3. RHEL7破解密码操作步骤

    首先查看系统是什么版本 cat /etc/redhat-release 第1步:然后重启Linux系统并出现引导界面时,按下键盘上的e键进入内核编辑界面. 第2步:在Linux16 参数这行的最后面追 ...

  4. Java虚拟机原理和调优

    https://blog.csdn.net/sun1021873926/article/details/78002118 115道Java经典面试题(面中率最高.最全) 史上最全 40 道 Dubbo ...

  5. lambda表达式排序

    lambda表达式排序简洁 1.给一个字符串数组: String[] atp = {"2016-06-28 08:00:00", "2017-12-05 19:17:32 ...

  6. Linux上安装JDK1.7步骤

    1.使用SecurtCRT连接上Linux,把jdk的压缩包传递过去:(传递的方法在我的博客中也有写,参考之前的博客) 2.解压缩jdk:tar -zxvf jdk-7u55-linux-i586.t ...

  7. [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境

    1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...

  8. Android中px dpi dip density densityDpi 的相关说明

    转自:http://www.cnblogs.com/wader2011/archive/2011/11/29/2267490.html 概念解释 名词 解释 Px (Pixel像素) 不同设备显示效果 ...

  9. application.properties 乱码 (已验证)

    1.打开Eclipse或MyEclipse 2.选择window-Preferences-content Types-Text-Java Properties File 3.将Java Propert ...

  10. HABSE表结构理解

    也分为行列,行是索引,锁定数据,查找数据只能通过行 列:建表时必须知道列族,真实列(列簇)在插入数据时候可以指定        查找指定列,必须带列族,列族1:name