如何在 SQL 或 PHP 中获取不包括假期(法语)和工作日的最后三天
Posted
技术标签:
【中文标题】如何在 SQL 或 PHP 中获取不包括假期(法语)和工作日的最后三天【英文标题】:How to get the last three days excluding holidays (french) and weekdays in SQL or PHP 【发布时间】:2018-05-21 13:46:32 【问题描述】:我有一个 sql 脚本,可以在我的基础中选择当前日期的最后三个日期,如下所示:
select distinct file_date
from my_database
where file_date > DATEADD(DAY, -3, CONVERT(date, SYSDATETIME()));
这对我来说只是在周三、周四和周五是正确的,但在周一我想排除工作日 例如,对于 Monday,我只想要周五和当前周一的 file_date。对于 Tuesday,我只想要周二和周一的 file_date。 我怎样才能排除节假日和工作日。 感谢您的帮助。
【问题讨论】:
您可能想从这里开始“假期”,因为这是一个复杂的问题:github.com/azuyalabs/yasumi 建立自己的日历表! DATEPART 函数可以帮助您轻松排除特定日期,例如周六、周日等,但对于假期,您需要按照@Squirrel 的建议构建自己的假期表 file_date 字段是什么格式的? 感谢您的回复。所以没有任何功能可以做到这一点。 【参考方案1】:没有示例数据和数据库结构,我还假设你有 mysql 数据库,所以我只会提示如何在 MYSQL 中进行操作 您可以使用WEEKDAY() 作为星期几的过滤器。 例如,这在普通查询中仅过滤周一至周五的结果:
SELECT *
FROM some_table
WHERE WEEKDAY(date_field) < 5
您也可以在 php.ini 中执行此操作。将结果增加到 5 行(包括可能的周末)并按日期降序排列结果。
//you have $results array with 5 elements
$lastThreeDays = [];
$i = 0;
foreach ($results as $res)
$tStamp = strtotime($res['date_field']);
$weekDay = date('N',$tStamp);
if ($weekDay < 6 && $i < 3)
$lastThreeDays[] = $res;
$i++;
不,您有过去 3 天的 3 条记录,不包括工作日。
【讨论】:
非常感谢我会试试的以上是关于如何在 SQL 或 PHP 中获取不包括假期(法语)和工作日的最后三天的主要内容,如果未能解决你的问题,请参考以下文章