mysql入门-数据类型(二)

今天说一下mysql的数据类型日期,mysql的日期类型有date、datetime、time、year、timestamp。

date其实就是日期,例如2019年07月27日,这就是日期。而时间呢,时间就是20:31,这就是时间的类型,也就是time。datetime就是将date和time合在了一起,例如2019-07-27 20:31了,year就不用说了,年份,timestamp就是一个时间戳,类似于datetime。接下来看一下演示代码以及结果。

date:

-- 建表语句
drop
table if exists test_06; create table test_06( a date, b time, c datetime, d year, e timestamp )
desc test_06;

查看一下各个字段的类型 

好了,咱们现在来插入数据,现在咱们不用sql语句来插,而是使用navicat来插入语句。

以b为例,定义的b为time类型,当插入数据的时候,可以看到,只弹出来要插入的时间,对了,这就是time类型的。看到a已经被我插入了,a的类型是date类型,看到的就如图所示。d这个是year类型,这个类型进行插入的时候并没有什么约束,能随意插入数据。来看一下最后的结果。

说明一下,最后一个字段我并没有插入,而是自动填好的,这就是timestamp的含义,他记录的是你当前修改这个表的时间,当然,你也可以选择去自己插入这个,如果不是手动插,那么就会自动帮着补上。我修改了一下a字段。e字段也会跟着改变。

 

这个timestamp一般用来记录修改此条记录的时间信息。

 

 下面说一下mysql关于操作时间的函数吧。

获取当前时间的函数:now()、sysdate()、current_timestamp()、current_timestamp、current_date()、current_time()、curdate()、curtime().

下面是演示内容

 但是这么多函数,彼此之间有什么区别呢,典型的例子就是now()这个函数,

select now(),sleep(3),now();

可以看到,中间线程睡了3秒钟,可是时间还是和第一个查出来的时间相同,这就是now()和其它获取当前时间函数的区别,now()会在执行sql语句的时候预分配好时间,不管线程睡眠多长时间,都是相同的结果。换成其他函数,就没有这种现象了,咱们试一下。

select SYSDATE(),sleep(3),SYSDATE();

这回结果就不相同了,这就是区别,其它的那几个就没有什么区别了。

 

 


 字符串转化为时间的函数:

str_to_date(str, format)先演示一下这个函数的使用

select STR_TO_DATE('1998-02-11 12:01:32','%Y-%m-%d %H:%i:%s')

可以看到,这样就将字符串转化为了日期,里面有一些通配符,这里面的通配符和其它语言的转化时间的通配符可能有些出入,解释一下通配符的含义

%Y      代表年     

%m     代表月

 %d     代表日         

%H     代表小时

 %i      代表分钟     

%s      代表秒

这些通配符一定要掌握,重中之重,后面还会用到的。

其他的字符串转化为时间的函数DATE_FORMAT(str, format),TIME_FORMAT(str, format)这两个和上一个函数的使用方法一样,只不过TIME_FORMAT(str, format)这个函数是专门转化时间所使用的。

 

 

 


 接下来这个函数是将时间转化为天数以及将天数转化为时间,可能这么说有点小抽象,上代码

select TO_DAYS(SYSDATE());

可以看到结果为一个整型数字,我来解释一下这个数字的含义,这个数字的含义就是距离公元0000年的天数。

select TO_DAYS('0000-01-01')

这回结果直观了吧。

还有一个函数就是from_days(days),也不多说,先看代码

select FROM_DAYS(1243);

 

此函数的意义就是将一个天数转化为以0000年为开始节点的时间

 

 

 


 在介绍两个转化时间的函数:time_to_sec(time)、sec_to_time(sex)

select TIME_TO_SEC(SYSDATE());

这个函数的功能就是将时间,注意,是time,而并非date转化为秒数。

另一个函数就是将秒数转化为时间

select SEC_TO_TIME(3600)

正正好好3600秒就是一个小时。

 

 


 日期拼接函数makedate(year, days of year)、maketime(hour, minute, second)

select makedate('2014', 366);
select maketime(12,14,04);

 day_of_year这个参数的意思就是一年中的天数,而不是一个月中的天数。

 

 

 


 日期计算函数date_add()、date_sub()、date_diff()、timestamp()、timestampadd()、timestampdiff()。

date_add()

select date_add(SYSDATE(), INTERVAL 1 year);

select date_add(SYSDATE(), INTERVAL 1 year);
select date_add(SYSDATE(), INTERVAL 1 month);
select date_add(SYSDATE(), INTERVAL 1 day);
select date_add(SYSDATE(), INTERVAL 1 hour);
select date_add(SYSDATE(), INTERVAL 1 minute);
select date_add(SYSDATE(), INTERVAL 1 second);

date_sub()的功能就是减去一个日期,和date_add()的方法使用相同,这里就不演示了,小伙伴们练习一下吧。

 datediff()。datediff()就是两个时间相减,注意,得到的只是天数。

select datediff(SYSDATE(), '2018-12-09 13:01:23')

得到的只是天数

 timestamp()。单纯的使用timestamp只是得到指定显示的时间。例如

select TIMESTAMP('2019-12-02 14:09:36');

还有另一种用法

select TIMESTAMP(SYSDATE(), CURRENT_TIME);
# select timestamp(date, time) date+time

 接下来说一下timestampadd

select TIMESTAMPADD(hour, 1, SYSDATE());
# timestampadd(unit, count, date) unit为单位,就是hour,second等,count就是加的数量,date就是指定的时间

 

 timestampdiff(),我个人认为这个时间相减的函数比datediff好用很多,这个函数比较灵活,可以指定相减之后得到的数据展现方式,即以天展示,还是以小时的方式展示。

select timestampdiff(day, SYSDATE(), '2020-12-10');

 select timestampdiff(year, SYSDATE(), '2020-12-10');

 

 # timestampdiff(unit, firstdatetime, seconddatetime)    unit(seconddatetime - firstdatetime)

所以个人推荐以后做两个时间相减的操作,使用timestampdiff()。

 

 

 


 今天就说这么多,已经是半夜00:06了,洗洗睡吧。

未完,待续。。。。。。