Mysql日期格式以及内置日期函数用法详解

 更新时间:2023年05月10日 14:34:24   作者:ximeneschen  
MySQL中有多种数据类型可以用于日期和时间的表示,这篇文章主要给大家介绍了关于Mysql日期格式以及内置日期函数用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、MySQL中的日期时间类型

MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp

datetime和timestamp的区别

  • 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS
  • 不同点:
    • a. 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小.
    • b. 与时区关系. datetime是存储服务器当前的时区. 而timestamp类型,是将服务器当前时间转换为UTC(世界时间)来存储.即datetime与时区无关,存什么,返回什么. 而timestamp存储的时间,返回的时间会随着数据库的时区不同而发生改变.

详细解释

  • datetime : 时间日期型,格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999。但是有零值,0000-00-00 00:00:00;
  • date:日期,就是datetime中的date部分;
  • time:时间(段),指定的某个区间之间,从-时间到+时间(有负时间表示);
  • timestamp:时间戳,并不是常规意义时间戳(如:14253685),范围是’1970-01-01 00:00:00’到2037年。格式为YYYY-mm-dd HH:ii:ss,格式与datetime完全一致;
  • year:yy和yyyy,yyyy的范围是1901-2155,yy的范围是1970-2069。

两位year(00-69表示2000-2069,70-99表示1970~1999)。当应用只需要记录年份时,year比date更省空间

create table my_date(
	d1 datetime,
	d2 date,
	d3 time,
	d4 timestamp,
	d5 year
)charset utf8;

描述表:

测试表

insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','11:50:54','2015-09-28 11:51:08','2015');
insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','-11:50:54','2015-09-28 11:51:08','2015');-- -11
insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','-211:50:54','2015-09-28 11:51:08','2015');-- -2 11
insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','-2 11:50:54','2015-09-28 11:51:08','2015');-- -2过去两天
#year用69标识-2069
insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','11:50:54','2015-09-28 11:51:08','69');-- 69
#year用70标识-1970
insert into my_date VALUES('2015-09-28 11:50:36','2015-09-28','11:50:54','2015-09-28 11:51:08','70');-- 70
insert into my_date VALUES(now(),now(),now(),now(),now());-- 70

二、mysql中获取时间戳

select UNIX_TIMESTAMP();

三、mysql中datetime类型的长度位数

通常我们MySQL中设计datetime类型长度都默认为0:这时插入时间通常会是我们常见到的:2020-08-29 12:52:16格式。但是如果datetime(n)中的n不为0呢?

create table my_date(
	datetime datetime,
	datetime2 datetime(2),
	date date,
	time time,
	timestamp timestamp,
	year year
)charset utf8;

四、mysql常用时间函数

获取当前时间

  • now()
  • sysdate()
  • current_timestamp()

sysdate() 日期函数和 now() 类似, 不同之处在于: now() 在执行开始的时候就得到值了, sysdate() 在函数执行时动态得到的值,例子如下:

时间转换函数(字符串转时间,时间转字符串) 日期/时间转字符串函数: date_format(date, format)(可以格式日期和时间), time_format(time, format)(可以格式时间)

字符串转换日期 函数: str_to_date(str, format)

可以看出, str_to_date(str, format) 转换函数, 可以把一些杂乱无章的字符串转换为日期格式.

日期, 天数转换函数: to_days(date), from_days(days),to_days():返回的是一个天数!从年份 0 开始的天数,from_days(days)作用与to_days相反。

时间, 秒 转换函数: time_to_sec(time), sec_to_time(seconds)

两个函数是相互的

设定日期, 时间函数: makedate(year, dayfoyear), maketime(hour, minute, second)

时间戳, 日期转换函数: unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp, format)

# 当前时间戳
select unix_timestamp();
# 指定时间的时间戳
select unix_timestamp('2020-09-09 12:00:00');
# 时间戳转换成日期
select from_unixtime(1599624000);
# 时间戳转换成指定格式日期
select from_unixtime(1599624000, '%Y-%D-%M %h:%i:%s');

五、日期时间计算函数

日期增加一个时间间隔函数: date_add()

set @dt = now();
# 增加一天
select date_add(@dt, interval 1 day);
# 增加一小时
select date_add(@dt, interval 1 hour);
# 增加一周
select date_add(@dt, interval 1 week);
# 增加一季度
select date_add(@dt, interval 1 quarter);
# 增加一天
select date_add(@dt, interval -1 day);

为指定日期减去一个时间间隔函数: date_sub(),用法如上。

两个日期, 时间相减函数: datediff(date1, date2), timediff(time1, time2)

时间戳 (timestamp) 转换, 增加, 减少函数: timestamp(date), timestamp(dt, time), timestampadd(unit, interval, datetime_expr), timestampdiff(unit, datetime_expr1, datetime_expr2)

# timestamp(date)
mysql> select timestamp('2020-09-09');
+-------------------------+
| timestamp('2020-09-09') |
+-------------------------+
| 2020-09-09 00:00:00     |
+-------------------------+
1 row in set (0.00 sec)

# timestamp(dt, time)
mysql> select timestamp('2020-09-09 09:00:00', '01:00:00');
+----------------------------------------------+
| timestamp('2020-09-09 09:00:00', '01:00:00') |
+----------------------------------------------+
| 2020-09-09 10:00:00                          |
+----------------------------------------------+
1 row in set (0.00 sec)

# timestampadd(unit, interval, datetime_expr)
mysql> select timestampadd(day, 1, '2020-09-09 09:00:00');
+---------------------------------------------+
| timestampadd(day, 1, '2020-09-09 09:00:00') |
+---------------------------------------------+
| 2020-09-10 09:00:00                         |
+---------------------------------------------+
1 row in set (0.00 sec)


# timestampdiff(unit, datetime_expr1, datetime_expr2), 返回结果以天为单位
mysql> select timestampdiff(day, '2020-09-09', '2020-09-01');
+------------------------------------------------+
| timestampdiff(day, '2020-09-09', '2020-09-01') |
+------------------------------------------------+
|                                             -8 |
+------------------------------------------------+
1 row in set (0.00 sec)

# 返回结果以小时为单位
mysql> select timestampdiff(hour, '2020-09-09 09:00:00', '2020-09-01 08:00:00');
+-------------------------------------------------------------------+
| timestampdiff(hour, '2020-09-09 09:00:00', '2020-09-01 08:00:00') |
+-------------------------------------------------------------------+
|                                                              -193 |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select datediff('2020-09-09', '2020-09-01');
+--------------------------------------+
| datediff('2020-09-09', '2020-09-01') |
+--------------------------------------+
|                                    8 |
+--------------------------------------+
1 row in set (0.00 sec)

timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数

总结

到此这篇关于Mysql日期格式以及内置日期函数用法的文章就介绍到这了,更多相关Mysql日期时间类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql设置值timestamp获取当前时间并自动更新方式

    mysql设置值timestamp获取当前时间并自动更新方式

    这篇文章主要介绍了mysql设置值timestamp获取当前时间并自动更新方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 深入解析MySQL索引的原理与优化策略

    深入解析MySQL索引的原理与优化策略

    MySQL索引是一种用于加速数据库查询的数据结构,它类似于书籍的目录,能够快速指导我们找到需要的信息。本文将带你介绍MySQL索引的原理与优化策略,感兴趣的小伙伴可以参考阅读
    2023-03-03
  • mysql去除重复数据只保留一条数据实例

    mysql去除重复数据只保留一条数据实例

    这篇文章主要给大家介绍了关于mysql去除重复数据只保留一条数据的相关资料,在使用MySQL时,有时需要查询出某个字段不重复的记录,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • MySQL中的RIGHT JOIN和CROSS JOIN操作示例

    MySQL中的RIGHT JOIN和CROSS JOIN操作示例

    本文详细介绍了MySQL中的RIGHT JOIN和CROSS JOIN操作,RIGHT JOIN返回右表中的所有记录及与左表中的记录相匹配的记录,而CROSS JOIN返回两个表中所有可能的组合,通过实际示例和输出结果,我们展示了如何使用RIGHT JOIN和CROSS JOIN进行数据库查询,一起看看吧
    2023-07-07
  • MySQL查询数据库中某个库、表、索引等所占空间的大小

    MySQL查询数据库中某个库、表、索引等所占空间的大小

    MySQL是一个非常流行的关系型数据库管理系统,它的查询操作是非常强大和灵活的。查询的效率不仅取决于表的大小,而且还取决于索引的大小,本文主要介绍了MySQL查询数据库中某个库、表、索引等所占空间的大小,感兴趣的可以了解一下
    2024-01-01
  • mysql分区表的增删改查的实现示例

    mysql分区表的增删改查的实现示例

    增删查改在数据库中是很常见的操作,本文主要介绍了mysql分区表的增删改查的实现示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 几个缩减MySQL以节省磁盘空间的建议

    几个缩减MySQL以节省磁盘空间的建议

    这篇文章主要介绍了几个缩减MySQL以节省磁盘空间的建议,主要从表结构和存储内容两个方面来谈减容,需要的朋友可以参考下
    2015-05-05
  • mysql数据库太大了如何备份与还原

    mysql数据库太大了如何备份与还原

    今天小编就为大家分享一篇关于mysql数据库太大了如何备份与还原,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT解决办法

    mysql8报错:ERROR 1410 (42000): You are not allowed to 

    电脑新装的mysql,版本为8.0以上,分配权限时直接带密码和账号会报错,这篇文章主要给大家介绍了关于mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT的解决办法,需要的朋友可以参考下
    2022-06-06
  • navicat连接mysql报错10060的解决办法

    navicat连接mysql报错10060的解决办法

    最近在学习中遇到了个小问题,现在将解决的办法分享给同样遇到这个问题的同学,这篇文章主要给大家介绍了关于navicat连接mysql报错10060的解决办法,需要的朋友可以参考下
    2023-03-03

最新评论