2015-08-30 128 views
2

如果日期范围(与开始和结束日期)在一个月(关于年),我试图用sql检查。月份和年份有变量(GET变量)。检查日期范围是否在月份(日历)

这是我的表:

+----+------+-------+-----+ 
| id | name | start | end | 
+----+------+-------+-----+ 

因为预约可能只是一个日期(开始和结束是在同一天),我要考虑这一点。

我查询

SELECT 
    id, 
    name, 
    start, 
    end 
FROM appointments 
WHERE (MONTH(start) = ? AND YEAR(end) = ?) OR (MONTH(start) = ? AND YEAR(end) = ?) 
ORDER BY start 

与此查询的问题是,它只是检查之间并不是个月开始月和月末。例如,如果预约时间超过5个月,则此查询失败。

回答

3

如果你想知道某个特定月份是否在该范围内,那么我建议将日期转换为YYYYMM格式。这使得逻辑相对容易表达:

where ?*100 + ? between year(start)*100 + month(start) and 
         year(end)*100 + month(end) 
+0

如何将日期转换为YYYYMM?也许在像'DATE_FORMAT(start,'YYYYMM')AS start2'这样的查询中?但这不起作用。 – Bernd

+0

@Bernd。 。 。算术就是这样。 。 。乘以年份100乘以月份。你也可以使用'date_format()',因为这对字符串和数字都有效。 –

相关问题