【问题标题】:Retrieve data between two dates in mysql在mysql中检索两个日期之间的数据
【发布时间】:2016-09-08 12:28:03
【问题描述】:

我在使用 MySQL 查询时遇到问题,我有一个“产品”表。在此表中,我有一个“product_expiry”列。我正在尝试创建一个表单,该表单将检索在两个日期之间具有“product_expiry”日期的所有产品。

例如,我想获取“product_expiry”日期从“04/2016”到“09/2016”的产品。

为此,我决定使用此查询。

SELECT * FROM `products` WHERE MONTH(product_expiry) >= "4" AND MONTH(product_expiry) <= "9" AND YEAR(product_expiry) = "2016"

虽然我在这些日期之间有产品,但它返回了 0 个产品。 我认为问题在于日期的格式。

然后我尝试了

SELECT * FROM `products` WHERE MONTH(STR_TO_DATE(`product_expiry`,'%d,%m,%Y')) >= "4" AND MONTH(STR_TO_DATE(`product_expiry`,'%d,%m,%Y')) <= "9" AND YEAR(STR_TO_DATE(`product_expiry`,'%d,%m,%Y')) = "2016"

但它再次返回 0 个产品。

注意: “product_expiry”是 varchar 不是日期列 日期格式为日/月/年

【问题讨论】:

  • 如果您尝试使用4, 9, 2016 作为整数而不是"4", "9", "2016",会发生什么?
  • 返回 0 个产品
  • 1.将日期存储为日期

标签: mysql date


【解决方案1】:

尝试使用以下查询。我将WHERE 子句中的'%d,%m,%Y' 替换为'%d/%m/%Y'

SELECT *
FROM `products`
WHERE MONTH(STR_TO_DATE(`product_expiry`, '%d/%m/%Y')) >= 4
    AND MONTH(STR_TO_DATE(`product_expiry`, '%d/%m/%Y')) <= 9
    AND YEAR(STR_TO_DATE(`product_expiry`, '%d/%m/%Y')) = 2016

请查找Working Demo

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2012-11-03
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多