mysql unit类型_mysql入门-数据类型(二)

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 existstest_06;create tabletest_06(

a date,

b time,

cdatetime,

dyear,

etimestamp)

desc test_06;

查看一下各个字段的类型

876ea6fbfb7d786e83032529718affef.png

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

991f75462268e79a1b96d9b3d3fc2219.png

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

9765d3dcf0fbb448fbd3be7460f24936.png

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

e2023e4568bd40267022ac3d08a8406f.png

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

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

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

下面是演示内容

628e70a2b03c13b089e0ea78ad6564f5.png

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

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

c73e4818f44effca257b9918abb52464.png

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

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

8db423b45f1034c8241e0b5d5061a833.png

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

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

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

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

d5393b6f1b627828975abbbbef83292e.png

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

%Y      代表年

%m     代表月

%d     代表日

%H     代表小时

%i      代表分钟

%s      代表秒

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

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

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

select TO_DAYS(SYSDATE());

2be4864d0af90c0891eba4baad809d25.png

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

select TO_DAYS('0000-01-01')

2d3e9c138dfcc989d53aef80a81bb4df.png

这回结果直观了吧。

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

select FROM_DAYS(1243);

555ed7ee9840d62be2c1bd14033c933e.png

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

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

select TIME_TO_SEC(SYSDATE());

2ab8fc59d4aeee13f579aa7ee88abea3.png

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

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

select SEC_TO_TIME(3600)

51cee30f23aafbfe0955b89ee6d0e439.png

正正好好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);

c7889cd484c88ecc8a2062e834b6ac90.png

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 1hour);select date_add(SYSDATE(), INTERVAL 1minute);select date_add(SYSDATE(), INTERVAL 1 second);

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

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

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

61499d953eb47ea2e43a5078920932d4.png

*得到的只是天数

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

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

2743de7fe94e4f441643e7568db4f4ee.png

还有另一种用法

select TIMESTAMP(SYSDATE(), CURRENT_TIME);

# select timestamp(date, time) date+time

9477907c1379a16e24a72cfea81f2af1.png

接下来说一下timestampadd

select TIMESTAMPADD(hour, 1, SYSDATE());

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

3361b71d50df4d09e2b37fa792ecced6.png

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

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

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

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

9d0664f1fecd27e652215e4e4501ef6c.png

cc524a4e6c49cc641bb6ebfe7a16de54.png

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

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

未完,待续。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值