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