1
我有一个很长的SQL查询,用于特定“区域”中给定月份的所有用户,计算它们已经运行的天数“义务”。这是分解到周末和工作日。这里是PHP/SQL语句:修改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
");
不幸的是,针对不同地区,每周不同的日子被认为是周末和平日 - 你可以在上面看到。所以星期天可能不被认为是一个周末。但这在这里并不重要。
我的问题是,我想说:“不要在计数不包括二零零九年十月十日任何日 - 10月13日,2009年
有谁知道我怎么能修改此SQL说?还是有一点点的PHP脚本,我可以写
感谢
有两件事:首先,BETWEEN的含义决不会因符合标准的RDBMS而有所不同。 其次(这可能是您认为BETWEEN可能会发生变化的原因):如果eventDate是时间戳类型并且可以包含非午夜值,那么这两个建议都不会起作用。要在10月10日至13日期间排除eventDate值,需要:AND(eventDate <'2009-10-10'OR eventDate> ='2009-10-14')。找到时间戳类型的“日期”列并不罕见,其中某些值仅作为日期输入(并且与时间=午夜一起存储),并且一些值以一天的时间输入。 BETWEEN建议将仅排除午夜定时值。 – 2009-10-11 20:58:27
我补充说,因为那是w3schools说的。我没有意识到实现可能会有所不同,并没有经历过,但包括了这个,所以提问者没有受到严重的冲击。不过,我同意你的评论。 http://www.w3schools.com/Sql/sql_between.asp – pstanton 2009-10-12 02:24:45