0

我有这个查询,用于从我的数据库中提取记录:

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 解决方案更容易,那也很好用。谢谢您的帮助。

4

2 回答 2

4

您需要一个符合您的“假期”标准的日期表,然后您JOIN可以找到该表。

这是一个例子

否则,您需要简单地排除它们......

... WHERE dateAdded NOT IN ('2012-07-04', ...)

更新

此解决方案使用 aJOIN来省略节假日。

于 2012-11-26T20:04:55.277 回答
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)
于 2019-06-10T15:59:04.560 回答