一. MySQL的日期时间函数
MySQL中关于日期/时间的数据类型共有五个, year,time,date,datetime,timestamp 。 其中,最重要的就是data,datatime,timestamp三个。 关于日期和日期, 在Java 中存在着 java.util.Date 类来进行日期的处理, MySQL数据库中也提供了大量的函数来对日期/时间进行处理。
MySQL的日期函数有:
二. MySQL 日期时间函数的分类
MySQL可以将日期/时间函数大致分为以下重要的类别:
- 获取当前的日期和时间
- UNIX时间戳
- 从一个具体日期中获取相应信息
- Extract 获取具体信息
- UTC 世界时间
- 时间和秒转换
- 其他单日期简单查询
- 两个日期之间的比较
- 日期和时间的格式化
下面,会进行详细的分析解释。
三. 获取当前的日期和时间
三.一 获取当前的日期 curdate() 和current_date()
只获取当前的日期, 用的函数是 : curdate() 和 current_date() 两个函数。 会按照’YYYY-MM-dd’ 或者 'YYYYMMDD’的格式展示出来。
select curdate(),current_date();
老蝴蝶现在的时间是 2019年11月27日。
可以将上面的日期 通过加 0 转换成相应的数字。
select curdate(), curdate()+0;
也可以+1,+2 等。 curdate()+数字,就会先将 curdate() 变成 'YYYYMMDD’的形式,变成纯数字,然后与 后面的数字进行相加。
select curdate()+1,curdate()+100;
三.二 获取当前的时间 curtime() 和current_time()
只获取当前的时间,用的函数是: curtime() 和current_time() 两个函数。 会按照 ‘HH:mm:SS’ 或者 'HHmmSS’的格式展示出来。
也可以加数字 0 或者其他数字值。
select curtime(),current_time(), curtime()+0,curtime()+1,curtime()+100;
三.三 获取当前的日期和时间 current_timestamp(),localtime(),now(),sysdate()
既获取日期,也获取时间。 有四个函数, current_timestamp(), localtime(), now(), sysdate(). 会按照 ‘YYYY-MM-DD HH:mm:SS’ 或者 ‘YYYYMMDDHHmmSS’ 的格式进行相应的展示。 注意,是localtime(), 不是 localetime(). 没有那个e.
select current_timestamp(), localtime(),now(),sysdate();
四个展示的时间是完全一样的。 这四个函数通常使用 now() 函数,因为它方法名短,简短易记。
三.三.一 now()与 sysdate() 的区别
其中, now() 与 sysdate() 是有一些区别的。
1 . now() 是在方法执行开始时,就得到的值。 是固定的值。
2 . sysdate() 是在方法执行时,动态获取的。
这两个方法,平常看起来是相同的, 但牵扯到休眠线程问题时,可能就会不同。
先看now 的 .
select now(),sleep(5),now();
暂停5秒之后展示数据。
发现,前后值是一样的。
再看 sysdate()
select sysdate(),sleep(5),sysdate();
暂停5秒之后,展示数据。
发现,前面的值是34,后面的秒数是39. 中间相差5秒。 是动态获取的。
也可以与 curdate(), curtime() 一样,加数字。 但没有什么重要意义,后面就不展示这些了。
select now(),now()+0,now()+1,now()+100;
以下中的 now() 如果没有特殊说明,均指的是 ‘2019-11-27’ 这一天。
四. UNIX 时间戳
可以获取相应的时间戳, 是 GMT (格林尼冶时间), 从1970年 1月1日,00:00:00 开始秒数。
四.一 将日期转换成时间戳 unix_timestamp(date)
传递一个日期,展示出来距离1970年的时间戳。 用的是 UNIX_timestamp(date) 函数。 其中, date 参数可以省略不写,如果不写的话,表示默认是当前的时间。 date 传入值时,只要传入符合格式的日期字符串即可,可以为 date,datetime,timestamp或者数字。
select now(),unix_timestamp(),unix_timestamp(now()),unix_timestamp('1995-02-07 11:23:59');
一个是 1574835843, 95年那个是 792127439
四.二 将时间戳转换成日期 from_unixtime(数字或数字型字符串)
将时间戳转换成相应的日期, 用 from_unixtime(数字字符串) 函数。 用刚才的那两个时间戳数字。 与 unix_timestamp(date) 函数互为反函数。
select from_unixtime('1574835843'),from_unixtime(792127439);