如何在 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 中获取不包括假期(法语)和工作日的最后三天的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何从不同的循环中获取结果

在Python中动态计算不包括假期日历的工作日数

如何从数据库中获取随机问题包括类别?

如何使用 sql 查询仅获取不包括括号的内容? [关闭]

如何在不使用 PDO 或 PHP 应用程序绑定的情况下解决二阶 SQL 注入

如何使用 SQL 和 PHP 从数据库 (phpMyAdmin) 的字段中获取/请求所有值?