Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 检查日期范围是否以月(日历)为单位_Mysql_Sql - Fatal编程技术网

Mysql 检查日期范围是否以月(日历)为单位

Mysql 检查日期范围是否以月(日历)为单位,mysql,sql,Mysql,Sql,我试图用sql检查日期范围(包括开始日期和结束日期)是否在一个月内(关于一年)。月份和年份是给定的变量(获取变量) 这是我的桌子: +----+------+-------+-----+ | id | name | start | end | +----+------+-------+-----+ 因为约会可能只是一个日期(开始和结束会是同一日期),所以我不得不考虑这个问题。 我的查询 SELECT id, name, start, end FROM appo

我试图用sql检查日期范围(包括开始日期和结束日期)是否在一个月内(关于一年)。月份和年份是给定的变量(获取变量)

这是我的桌子:

+----+------+-------+-----+
| 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个月,此查询将失败。

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

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

如何将日期转换为YYYYMM?可能在查询中,例如
DATE\u格式(start'YYYYMM')作为start2
?但这行不通。@Bernd。这就是算术所做的。将年份乘以100,然后将月份相加。您还可以使用
date\u format()
,因为这将适用于字符串和数字。