A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 huawei 于 2017-12-29 19:28 编辑

下面分享的时间函数,是进行业务的基础。大家要牢牢的背下来比较好。

1、当前的时间(字符串时间与unix时间戳时间):
经常有需求要获取服务器当前的时间,在mysql里面很简单:now()

这个now() 时间是当前mysql服务器的时间,并不是我们执行操作(比如用户注册)行为的时间。mysql执行操作行为的时间是:sysdate();

这 两个时间的主要区别:now() 是系统的时间。是一直都存在的。而sysdate() 是我们执行一个操作时候的时间。关于获取当前时间,mysql还有一些其他的函数,不过名字起的乱七八糟,什么current_timestamp() current_timestamp,localtime() localtime,localtimestamp() localtimestamp。名字明明是timestamp,但是结果却是一个字符串,愿意学习的朋友可以多记几个。
上面的now() 和sysdate() 是一个字符串的时间。我们有时候,也会用到当前的时间戳。
当前的时间戳:unix_timestamp();
这个函数如果()里面没有传值,获取的是当前的时间戳。如果传值则是获取所串进去的时间的时间戳。看图:

2、时间的格式化。
时间的格式化一般分为以下几种需求:
① 将字符串的时间变成unix时间戳。例如将 2015-11-14 04:03:16 变成 1447445028
② 将unix时间戳变成字符串的时间。 例如将 1447445028 变成 2015-11-14 04:03:16
③ 将字符串时间戳进行格式化,只取年, 只取月,只取周等等。
来吧,我们一一击破。
针对第一种需求,前面已经讲过了,使用unix_timestamp()函数即可。例如 unix_timestamp('2014-05-09');
针对第二种需求,既然有unix_timestamp函数也肯定有from_unixtime这个函数。顾名思意,是将一个unixtime转化成时间戳。有两种写法,可以各取所需。

针对第三种需求:经常需要获取某个时间的年份、月份、或者在一年中是第几周、是第几个季度等等。那么我们就需要下面这些函数了。




这些单词比较简单,所以记忆起来也不费功夫。
比如有一个需求,我想看看一周中,周一至周五中,注册会员的情况是怎样的。则上面的情况就不能帮助我们了。我们需要取出会员的注册时间,然后拿到PHP里面换算出,今天是星期几,然后统计人数。
mysql知道我们可能会有这个需求,于是类似的函数也写好了。

又比如,我想知道每个月月末那一天公司产品的销售状况。通常这个要靠PHP来算出一个月的最后一天是什么,然后到数据库去查。但是mysql又帮我做好了,简直太省力了。

补充一点: 使用extract()函数也能满足上面的需求,具体的用法:select extract();下面的用法看看就好,如果有喜欢的,也可以使用。
set @dt = '2008-09-10 07:15:30.123456';

select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456
3、日期的加减运算。
实际项目中,经常会查看一些产品的历史性信息。有了mysql的日期加减函数,就不需要先用PHP算好时间,然后传进mysql里。这些mysql都可以处理。



还有一些其他的用法,总之只要你想到的,Mysql都已经做好了。感兴趣的,可以参考mysql手册。





2 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马