【问题标题】:Check if date range is in month (calendar)检查日期范围是否为月份(日历)
【发布时间】:2015-08-30 15:24:23
【问题描述】:

我正在尝试使用 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 个月,则此查询失败。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

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

    【讨论】:

    • 如何将日期转换为 YYYYMM?也许在像DATE_FORMAT(start, 'YYYYMM') AS start2 这样的查询中?但这不起作用。
    • @Bernd 。 . .这就是算术的作用。 . .将年份乘以 100 并加上月份。您也可以使用date_format(),因为这适用于字符串和数字。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多