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