在mysql

时间:2016-09-08 12:28:03

标签: mysql date

我遇到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而不是日期列 和格式的日期是日/月/年

1 个答案:

答案 0 :(得分:0)

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

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