mysql - 选择日期格式为 'YYYY-MM' 的记录到给定范围

标签 mysql date between

我想获取所有接近“过期”的产品。

到期日列exDate的日期格式为(Y-m)YYYY-MM,例如:2018-03.

我正在尝试使用此查询,但它会从表中获取所有记录。

SELECT * FROM product WHERE (exDate BETWEEN DATE_FORMAT(NOW() ,'Y-m') AND NOW()+ interval 2 month)

最佳答案

exDateYYYY-MM 格式转换为 mySql date 格式 YYYY-MM-DD 然后对该值执行查询:

SELECT * FROM product WHERE STR_TO_DATE( `exDate`, "%Y-%m" ) BETWEEN CURDATE() AND DATE_ADD( CURDATE(), INTERVAL 2 MONTH)

exDate转成mySqldate格式YYYY-MM-DD with

STR_TO_DATE( `exDate`, "%Y-%m" )

注意 % 符号是指定格式所必需的。

那么这个就是必须落入区间的值。

请注意,您可以只使用 CURDATE() 将当前日期转换为 date 格式。

要将时间间隔添加到日期,您必须使用 mySql 函数 DATE_ADD()


请注意,从今天开始 2018-03-17 您将捕获带有 exDate 且值为 2018-042018 的产品-05.

2018-03 不是结果的一部分,因为它变成了 2018-03-01 并且是之前今天(下限)。

2018-05 结果的一部分,因为它变成了2018-05-01并且在上限之前DATE_ADD(CURDATE(), INTERVAL 2 MONTH) 计算结果为 2018-05-17

关于mysql - 选择日期格式为 'YYYY-MM' 的记录到给定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49335370/

相关文章:

mysql - 选择给定日期范围内的所有月份,包括具有 0 值的月份

MySql;如何找到两个查询之间的时间并按最短时间对它们进行排序

mysql - 如何将同一个表中的两列合并为一列?

mysql - 检索 MySQL 中的下一行

javascript - 如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?

date - 在 Freemarker 中格式化日期为 "Today"、 "Yesterday"等

最近2小时的Mysql结果集

mysql - 通过附加数百行来更新表

MySQL - 每分钟保留一行

在函数中分配日期后,PHP 变量的值为 0