0


mysql常用的日期函数以及查询昨天,今天,本周,上个月的数据

一 常用的日期函数

1. CURDATE()

CURDATE() 是一个 MySQL 函数,用于返回当前的日期,格式为 YYYY-MM-DD。它不包含时间部分,仅显示日期。

SELECT CURDATE();// 2024-09-20

注意事项

  • CURDATE() 返回的日期格式与系统的日期格式设置有关,但通常以 YYYY-MM-DD 格式返回。
  • 该函数在使用时不需要参数。

2. NOW()

NOW() 是一个 MySQL 函数,用于返回当前的日期和时间,格式为 YYYY-MM-DD HH:MM:SS。它提供精确到秒的时间戳。

SELECTNOW();//2024-09-20 14:23:15

注意事项

  • NOW() 返回的时间戳是根据服务器的时区设置,如果需要特定时区的时间,可以使用 CONVERT_TZ() 函数进行转换。
  • 该函数在使用时不需要参数。

3. DATE(date)

DATE() 是一个 MySQL 函数,用于从一个日期时间值中提取日期部分,返回格式为 YYYY-MM-DD。

SELECTDATE(NOW());// 2024-09-20

注意事项

  • DATE() 函数返回的结果总是 YYYY-MM-DD 格式,不包括时间部分。
  • 如果输入的值不是有效的日期时间格式,函数将返回 NULL。

4. DATEDIFF(date1, date2)

DATEDIFF() 是一个 MySQL 函数,用于计算两个日期之间的差异,返回结果为相差的天数。

  • 语法:
DATEDIFF(date1, date2)

用法示例

  • 计算两个日期之间的天数差:
SELECT DATEDIFF('2024-09-20','2024-09-15')AS days_difference;

输出示例:5(表示两个日期之间相差 5 天)

  • 过滤特定日期范围:

可以使用 DATEDIFF() 来筛选某个时间范围内的数据:

SELECT*FROM your_table 
WHERE DATEDIFF(NOW(), created_at)>30;

这将返回创建时间超过 30 天的记录。

注意事项

  • 返回的差值是一个整数,正值表示 date1 晚于 date2,负值则表示 date1 较早于 date2。
  • 输入的日期格式必须是有效的日期格式,通常为 YYYY-MM-DD。

5. DATE_ADD(date, INTERVAL expr unit)

DATE_ADD() 是一个 MySQL 函数,用于向指定的日期添加一个时间间隔。这个函数可以用于日期的加法运算。

  • 语法
DATE_ADD(date,INTERVALvalue unit)

参数:
date:要进行加法运算的日期。
value:要添加的时间量。
unit:时间单位,如 DAY、MONTH、YEAR 等。

用法示例

  • 向日期添加天数:
SELECT DATE_ADD('2024-09-20',INTERVAL10DAY)AS new_date;

输出示例:2024-09-30(表示在原日期基础上增加了 10 天)

  • 向日期添加月份:
SELECT DATE_ADD('2024-09-20',INTERVAL2MONTH)AS new_date;

输出示例:2024-11-20(表示在原日期基础上增加了 2 个月)

  • 向日期添加年份:
SELECT DATE_ADD('2024-09-20',INTERVAL1YEAR)AS new_date;

输出示例:2025-09-20(表示在原日期基础上增加了 1 年)

  • 在查询中使用:

假设有一个包含创建日期的表,可以计算未来某个日期:

SELECT*, DATE_ADD(created_at,INTERVAL30DAY)AS future_date 
FROM your_table;

注意事项

  • 时间单位可以是 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 等。
  • 确保 value 是一个合适的数据类型(通常是整数)。

6. DATE_SUB(date, INTERVAL expr unit)

DATE_SUB() 是一个 MySQL 函数,用于从指定的日期中减去一个时间间隔

语法

DATE_SUB(date,INTERVALvalue unit)

参数:
date:要进行减法运算的日期。
value:要减去的时间量。
unit:时间单位,如 DAY、MONTH、YEAR 等。

用法示例

  • 从日期中减去天数:
SELECT DATE_SUB('2024-09-20',INTERVAL10DAY)AS new_date;

输出示例:2024-09-10(表示在原日期基础上减去 10 天)

  • 从日期中减去月份:
SELECT DATE_SUB('2024-09-20',INTERVAL2MONTH)AS new_date;

输出示例:2024-07-20(表示在原日期基础上减去 2 个月)

  • 从日期中减去年份:
SELECT DATE_SUB('2024-09-20',INTERVAL1YEAR)AS new_date;

输出示例:2023-09-20(表示在原日期基础上减去 1 年)

  • 在查询中使用:

假设有一个包含创建日期的表,可以计算过去的日期:

SELECT*, DATE_SUB(created_at,INTERVAL30DAY)AS past_date 
FROM your_table;

注意事项

  • 时间单位可以是 SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 等。
  • 确保 value 是一个合适的数据类型(通常是整数)。

7. YEAR(date)

返回日期的年份部分。

SELECTYEAR(NOW());// 2024

8. MONTH(date)

返回日期的月份部分(1-12)。

SELECTMONTH(NOW());// 9

9. DAY(date)

返回日期的天数部分(1-31)。

SELECTDAY(NOW());// 20

10. WEEK(date)

返回日期是一年中的第几周。

SELECT WEEK(NOW());// 38

11. LAST_DAY(date)

返回指定月份的最后一天。

SELECT LAST_DAY(NOW());// 2024-09-30

12 TO_DAYS

TO_DAYS 函数在 MySQL 中用于将日期转换为天数。它可以用于计算两个日期之间的差异

SELECT*FROM 表名
WHERE TO_DAYS(NOW())- TO_DAYS(时间字段名)=1;

13 DATE_FORMAT

DATE_FORMAT 是 MySQL 中用于格式化日期和时间的函数。它允许你将日期转换为指定的格式

SELECT DATE_FORMAT(时间字段名,'%Y-%m-%d')AS 格式化日期
FROM 表名;

常用格式符
%Y: 四位年份(例如:2024)
%y: 两位年份(例如:24)
%m: 两位月份(01到12)
%d: 两位日期(01到31)
%H: 两位小时(00到23)
%i: 两位分钟(00到59)
%s: 两位秒数(00到59)

14 YEARWEEK()

YEARWEEK()是 MySQL 中的一个函数,用于获取指定日期的年份和周数。这个函数通常用于按周进行分组和筛选数据。

1 语法

YEARWEEK(date,mode)
  • date: 要检查的日期值。
  • mode: (可选)指定一周的第一天,默认为 0,表示周日为一周的第一天。常用的模式包括:

0: 周日为第一天
1: 周一为第一天
2: 周二为第一天

6: 周六为第一天
3-7: 与 ISO 8601 标准相同
2 示例用法
假设有一个名为 orders 的表,包含一个 created_at 列,记录订单的创建时间。你可以使用 YEARWEEK() 函数来获取当前周的数据:

SELECT*FROM orders
WHERE YEARWEEK(created_at,1)= YEARWEEK(CURDATE(),1);

3 代码说明

  • 在上面的查询中,YEARWEEK(created_at, 1) 将返回 created_at 日期的年份和周数(以周一为一周的开始)。
  • YEARWEEK(CURDATE(), 1) 返回当前日期的年份和周数。
  • 通过比较这两个值,查询会筛选出所有在当前周内创建的订单。

二 案例

1 INTERVAL 1 DAY

INTERVAL 1 DAY 是 MySQL 中用来表示时间间隔的关键字,可以用于日期和时间的运算。它的作用是增加或减少特定的时间单位。

示例用法

  • 减少一天:
SELECT CURDATE()-INTERVAL1DAY;

这将返回昨天的日期。

  • 增加一天:
SELECT CURDATE()+INTERVAL1DAY;

这将返回明天的日期。

适用场景

  • 用于计算特定日期的前后日期。
  • 在查询中筛选特定时间段的数据,例如获取昨天、上个月的数据等。是 MySQL 中用来表示时间间隔的关键字,可以用于日期和时间的运算。它的作用是增加或减少特定的时间单位。

2 获取昨天的数据

  • 使用 DATE_SUB
SELECT*FROM your_table 
WHEREDATE(created_at)= DATE_SUB(CURDATE(),INTERVAL1DAY);

1 CURDATE():获取当前日期(不包含时间)。
2 INTERVAL 1 DAY:表示时间间隔为 1 天。
3 DATE(created_at):将 created_at 列中的日期时间转换为日期格式,以便进行比较。

  • 使用 TO_DAYS TO_DAYS 函数在 MySQL 中用于将日期转换为天数。它可以用于计算两个日期之间的差异
SELECT*FROM
    t_goods_product
WHERE
    TO_DAYS(NOW())- TO_DAYS(crTime)=1;

3 获取今天的数据

  • 使用date
SELECT*FROM 表名
WHEREDATE(时间字段名)= CURDATE();
  • 使用 DATE_FORMAT
SELECT*FROM 表名
WHERE DATE_FORMAT(时间字段名,'%Y-%m-%d')= CURDATE();

4 获取上个月数据

  • 使用 DATE_FORMAT
SELECT*FROM 表名
WHERE DATE_FORMAT(时间字段名,'%Y-%m')= DATE_FORMAT(NOW()-INTERVAL1MONTH,'%Y-%m');
  • 使用 DATE_SUB 结合 DAY:
SELECT*FROM 表名
WHERE 时间字段名 >= DATE_SUB(CURDATE(),INTERVALDAY(CURDATE())DAY+1MONTH)AND 时间字段名 < DATE_SUB(CURDATE(),INTERVALDAY(CURDATE())DAY);
  • 使用 DATE_ADD 和 LAST_DAY:
SELECT*FROM 表名
WHERE 时间字段名 >= DATE_ADD(LAST_DAY(CURDATE()-INTERVAL2MONTH),INTERVAL1DAY)AND 时间字段名 <= LAST_DAY(CURDATE()-INTERVAL1MONTH);

5 获取当前一周的数据

获取当前一周的数据,可以使用 WEEK 函数或日期函数结合 CURDATE() 来筛选出当前周的记录。以下是一些常见的查询示例。

1: 使用 WEEK() 函数

假设你有一个名为 orders 的表,包含一个 created_at 列,记录订单的创建时间。你可以用以下查询获取当前一周的数据:

SELECT*FROM orders
WHERE WEEK(created_at,1)= WEEK(CURDATE(),1)ANDYEAR(created_at)=YEAR(CURDATE());

2: 使用日期范围
另一种方法是直接计算当前周的开始和结束日期。默认情况下,一周从周一开始到周日结束。你可以这样写:

SELECT*FROM orders
WHERE created_at >= CURDATE()-INTERVAL WEEKDAY(CURDATE())DAYAND created_at < CURDATE()+INTERVAL(7- WEEKDAY(CURDATE()))DAY;

3: 使用 YEARWEEK()
使用 YEARWEEK() 函数也是一种有效的方法,它将年份和周数组合在一起:

SELECT*FROM orders
WHERE YEARWEEK(created_at,1)= YEARWEEK(CURDATE(),1);
标签: mysql 数据库

本文转载自: https://blog.csdn.net/qq_48763502/article/details/142377051
版权归原作者 &白帝& 所有, 如有侵权,请联系我们删除。

“mysql常用的日期函数以及查询昨天,今天,本周,上个月的数据”的评论:

还没有评论