php - MySQL 中的月份查询

标签 php mysql mysqli

我正在尝试获取在当前日期有季节开始日期和季节结束日期的行。 但我对冬天几个月之间的月经有疑问。例如冬天从 01.11 开始到 28.02 结束(我不关心 27 或 28)

当我尝试像下面的查询那样在冬天获取产品时

SELECT *
FROM products P
LEFT JOIN seasons S ON P.s_id = S.id
WHERE MONTH(CURDATE()) BETWEENS MONTH(S.startdate) and MONTH(S.enddate)

我什么都没有

seasons 表有一行的值低于

id = 1
Description = Winter
startdate = 2013-11-01
enddate = 2014-02-28

!重要 我不关心 year

有人可以帮忙吗?谢谢

最佳答案

您可以通过 CASE 实现此目的:

SELECT *
FROM products P
LEFT JOIN seasons S ON P.s_id = S.id
WHERE CASE 
WHEN MONTH(S.startdate) > MONTH(S.enddate)
  AND (MONTH(CURDATE()) > MONTH(S.startdate) 
      OR MONTH(CURDATE()) < MONTH(S.enddate))
  THEN 1
WHEN MONTH(S.startdate) <= MONTH(S.enddate)
  AND MONTH(CURDATE()) BETWEEN MONTH(S.startdate) AND MONTH(S.enddate)
  THEN 1
ELSE 0
END

这假设每当 MONTH(startdate) > MONTH(enddate) 时年份已经改变。 在这种情况下,只要 MONTH(curdate()) 大于 MONTH(startdate) 或小于 MONTH(enddate),就会返回 true。

在 MONTH(startdate) <= MONTH(enddate) 的情况下,它只是验证它是否在它们之间。

sqlfiddle demo

关于php - MySQL 中的月份查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378139/

相关文章:

php - Laravel 数据库 'Where' 语句中断

php - 内部查询不起作用

php - 检查客户端是否收到http响应

php - 如何从两个表中获取结果? (MySQLi)

javascript - 选中复选框时 PHP 更改查询

Mysql-数据操作-更新部分值

python - MySQL 到 AppEngine

php - 使用 mysql 和 php 创建一个多步骤进程

php - 如果没有找到记录,则返回默认值

php - MySQL 使用第二个表中的条件构建查询