我有这个查询,我用来从我的数据库中提取记录:
SELECT dateAdded, claimedDate, TIMESTAMPDIFF(SECOND, dateAdded, claimedDate) AS output FROM leads
WHERE HOUR(dateAdded) >= '9'
AND HOUR(dateAdded) < '18'
AND DAYOFWEEK(dateAdded) != 7
AND DAYOFWEEK(dateAdded) != 1
目前,我目前只选择时间戳在周一至周五上午9:00到下午5:00之间的记录。我还需要能够排除以下主要假期:元旦,阵亡将士纪念日,独立日,劳动节,感恩节和圣诞节。
我需要一直排除这些假期。例如,查询应排除在11月的第四个星期四(感恩节)发生的所有记录,无论年份如何。
这不一定需要仅限MySQL的解决方案。如果更容易做一个混合的PHP / MySQL解决方案,也会很有效。谢谢你的帮助。
答案 0 :(得分:4)
您需要一张符合“假期”标准的日期表,然后JOIN
到该表。
否则,您只需要将它们排除在外......
... WHERE dateAdded NOT IN ('2012-07-04', ...)
<强>更新强>
This solution使用JOIN
来省略假期。
答案 1 :(得分:0)
您可以创建一个函数is_holiday,然后将其添加到select语句中。这样。
CREATE DEFINER=`root`@`localhost` FUNCTION `is_holiday`(nDate Date) RETURNS tinyint(1)
BEGIN
declare isholiday boolean;
set isholiday = false;
if month(nDate)=1 and day(nDate)=1 then set isholiday = true;
elseif month(nDate)=7 and day(nDate)=4 then set isholiday = true;
elseif month(nDate)=12 and day(nDate)=25 then set isholiday = true;
elseif month(nDate)=9 and day(nDate) between 1 and 7 and weekday(nDate) = 0 then set isholiday = true;
elseif month(nDate)=11 and day(nDate) between 22 and 28 and weekday(nDate) = 3 then set isholiday = true;
end if;
RETURN isholiday;
end
添加到您的代码...
and not is_holiday(dateAdded)