我有一个很长的SQL查询,对于特定“区域”中的所有用户,在给定的月份,我会使用它来计算他们“执行任务”的天数。这可以分解为周末和工作日。这是php / SQL语句:
$result = mysql_query("
SELECT fname, lname, MONTH( eventDate ) AS MONTH ,
SUM( IF( WEEKDAY( eventDate ) <=2, 1, 0 )
OR IF( WEEKDAY( eventDate ) = 6, 1, 0 )) AS WeekdayCount,
SUM( IF( WEEKDAY( eventDate ) = 4, 1, 0 )
OR IF( WEEKDAY( eventDate ) = 5, 1, 0 )
OR IF( WEEKDAY( eventDate ) = 3, 1, 0 )) AS WeekendCount,
SUM( IF( secondary =0, 1, 0 ) ) AS `Primary`,
SUM( IF( secondary =1, 1, 0 ) ) AS `Secondary`
FROM eventcal AS e
LEFT JOIN users AS u ON e.primary = u.username
WHERE e.region = '$region' AND MONTH( eventDate ) = '$month'
GROUP BY fname, lname, MONTH( eventDate )
ORDER BY lname
");
不幸的是,对于不同的地区,一周中的不同日期被视为周末和工作日 - 如上所示。所以周日可能不算周末。但这在这里并不重要。
我的问题是,我想说:“从2009年10月10日到2009年10月13日的任何日子都不包括在内。
有谁知道如何修改这个SQL来说明这一点?或者我可以编写一些PHP脚本吗?
谢谢!
答案 0 :(得分:3)
您可以添加where子句(就在'GROUP BY'之前)
AND eventDate NOT BETWEEN '2009-10-10' AND '2009-10-13'
注意:根据数据库,between语句可以有不同的功能 - 它可以是包容性的或排他性的,即它可以包括或排除完全落在范围的开头或结尾的结果,所以可选:
AND (eventDate<'2009-10-10' OR eventDate>'2009-10-13')
另请注意,在纯文本中包含日期sql查询在不同数据库上的处理方式不同,因此请阅读数据库的文档。以上内容适用于postgres。