当前位置: 代码网 > it编程>数据库>Mysql > MySQL常用函数详解之日期函数

MySQL常用函数详解之日期函数

2025年06月17日 Mysql 我要评论
从记录订单时间、用户注册时间,到统计每月销售额、分析数据变化趋势,都离不开对日期时间的操作,mysql提供了丰富的日期函数,能够高效地进行日期和时间的提取、计算、格式化等操作。本文我将深入剖析mysq

从记录订单时间、用户注册时间,到统计每月销售额、分析数据变化趋势,都离不开对日期时间的操作,mysql提供了丰富的日期函数,能够高效地进行日期和时间的提取、计算、格式化等操作。本文我将深入剖析mysql常用日期函数的功能、语法及应用场景,并结合实战案例,带你全面掌握日期函数的使用技巧。

一、日期函数概述

1.1 日期函数的作用

mysql日期函数主要用于处理日期和时间数据,其核心作用包括:

  • 日期和时间的提取:从日期时间字段中获取年、月、日、时、分、秒等具体信息。
  • 日期和时间的计算:执行日期的加减运算,计算两个日期之间的间隔。
  • 日期和时间的格式化:将日期时间数据转换为指定的格式,方便展示和处理。
  • 日期和时间的比较与判断:判断日期是否在特定范围内,比较两个日期的先后顺序。

1.2 日期数据类型

在深入学习日期函数前,先回顾mysql中常用的日期和时间数据类型:

  • date:用于存储日期,格式为yyyy-mm-dd
  • time:用于存储时间,格式为hh:mm:ss
  • datetime:用于存储日期和时间,格式为yyyy-mm-dd hh:mm:ss
  • timestamp:也用于存储日期和时间,范围比datetime更窄,但占用空间更小,自动更新为当前时间。

二、日期和时间的获取函数

2.1 获取当前日期和时间

  • curdate():返回当前日期,格式为yyyy-mm-dd
select curdate();
  • curtime():返回当前时间,格式为hh:mm:ss
select curtime();
  • now():返回当前日期和时间,格式为yyyy-mm-dd hh:mm:ss
select now();
  • sysdate():同样返回当前日期和时间,与now()的区别在于sysdate()在函数执行时获取时间,而now()在语句开始执行时获取时间。
select sysdate();

2.2 提取日期和时间的部分信息

  • year(date):返回日期中的年份。
select year(now()) as current_year;
  • month(date):返回日期中的月份(1 - 12)。
select month(now()) as current_month;
  • day(date):返回日期中的日(1 - 31)。
select day(now()) as current_day;
  • hour(time):返回时间中的小时数。
select hour(curtime()) as current_hour;
  • minute(time):返回时间中的分钟数。
select minute(curtime()) as current_minute;
  • second(time):返回时间中的秒数。
select second(curtime()) as current_second;

2.3 获取日期中的星期、季度等信息

  • weekday(date):返回日期对应的星期索引(0表示星期一,6表示星期日)。
select weekday(now()) as weekday_index;
  • dayname(date):返回日期对应的星期名称。
select dayname(now()) as weekday_name;
  • monthname(date):返回日期对应的月份名称。
select monthname(now()) as month_name;
  • quarter(date):返回日期所在的季度(1 - 4)。
select quarter(now()) as current_quarter;

三、日期和时间的计算函数

3.1 日期和时间的加减运算

  • date_add(date, interval expr unit):在指定日期上增加一段时间间隔。
-- 在当前日期上加7天
select date_add(now(), interval 7 day) as add_7_days;
  • date_sub(date, interval expr unit):在指定日期上减去一段时间间隔。
-- 在当前日期上减1个月
select date_sub(now(), interval 1 month) as subtract_1_month;
  • adddate(date, interval expr unit):功能与date_add相同。
select adddate(now(), interval 3 hour) as add_3_hours;
  • subdate(date, interval expr unit):功能与date_sub相同。
select subdate(now(), interval 15 minute) as subtract_15_minutes;

3.2 计算两个日期之间的间隔

  • datediff(date1, date2):返回两个日期之间相差的天数。
-- 计算两个日期之间的天数差
select datediff('2024-12-31', '2024-01-01') as day_difference;
  • timestampdiff(unit, datetime1, datetime2):返回两个日期时间之间的间隔,unit可以是yearmonthdayhourminutesecond等。
-- 计算两个时间之间相差的小时数
select timestampdiff(hour, '2024-01-01 00:00:00', '2024-01-01 12:00:00') as hour_difference;

四、日期和时间的格式化函数

4.1 date_format(date, format)

date_format函数将日期按照指定的格式进行格式化,常用的格式代码如下:

  • %y:四位年份(如2024)
  • %y:两位年份(如24)
  • %m:两位月份(01 - 12)
  • %b:月份缩写(如jan)
  • %m:月份全称(如january)
  • %d:两位日期(01 - 31)
  • %h:24小时制小时数(00 - 23)
  • %h:12小时制小时数(01 - 12)
  • %i:分钟数(00 - 59)
  • %s:秒数(00 - 59)

示例:将当前日期格式化为“2024年12月31日 12:00:00”

select date_format(now(), '%y年%m月%d日 %h:%i:%s') as formatted_date;

4.2 time_format(time, format)

time_format函数用于格式化时间,与date_format类似,但仅适用于时间部分。

-- 将当前时间格式化为“下午12时00分00秒”
select time_format(curtime(), '%p%h时%i分%s秒') as formatted_time;

五、日期和时间的比较与判断函数

5.1 比较日期和时间的先后顺序

可以直接使用比较运算符(><>=<==)对日期和时间进行比较。

-- 判断当前日期是否大于指定日期
select now() > '2024-01-01' as is_greater;

5.2 判断日期是否在特定范围内

使用between... and...语句判断日期是否在指定的范围内。

-- 查询订单表中2024年1月1日到2024年12月31日之间的订单
select *
from orders
where order_date between '2024-01-01' and '2024-12-31';

六、实战案例

6.1 统计每月销售额

sales表中,有order_date(订单日期)和amount(订单金额)字段,需求是统计每个月的总销售额。

select 
    date_format(order_date, '%y-%m') as month,
    sum(amount) as total_sales
from 
    sales
group by 
    date_format(order_date, '%y-%m')
order by 
    month;

6.2 计算用户注册时长

users表中,register_date字段记录了用户的注册日期,需求是计算每个用户的注册时长(以天数为单位)。

select 
    user_id,
    datediff(curdate(), register_date) as registration_days
from 
    users;

6.3 筛选本周内的活动数据

activities表中,activity_date字段记录活动发生的日期,需求是筛选出本周内的活动数据。

select *
from activities
where activity_date between date_sub(curdate(), interval weekday(curdate()) day) 
                    and date_sub(curdate(), interval weekday(curdate()) - 6 day);

到此这篇关于mysql常用函数详解之日期函数的文章就介绍到这了,更多相关mysql日期函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com