sql-server - 用于选择超过 3 天但不包括周末(周六和周日)的记录的 Where 子句

标签 sql-server

我试图在 SQL Server 中选择比当前日期晚 3 天的记录,但我需要排除周末(周六和周日)。

以下 SQL 脚本可用于选择超过 3 天的记录:

select * from [dbo].[tb_Schedule]
WHERE date >= DATEADD(day, -3, GETDATE())

但问题是我不知道如何排除周末。

我知道下面的Where子句用于排除周末,但我不知道如何在上面的where子句中实现它

WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)

请协助我如何选择超过 3 天但不包括周末的记录。谢谢

最佳答案

这是一个公式,其中包含有关如何排除周末的示例。正如我们之前提到的,请考虑使用日历表,因为您可能希望排除节假日。

SELECT calDate, 
    DATENAME( dw, calDate), 
    DATEADD( DD, -( 3 + CASE WHEN DATEDIFF( DD, '19000106', calDate)%7 <= 2 THEN DATEDIFF( DD, '19000106', calDate)%7
                            WHEN DATEDIFF( DD, '19000106', calDate)%7 = 3 THEN 2
                            ELSE 0 END), calDate)
FROM (VALUES( CAST( '20190201' AS date)),
            ( CAST( '20190202' AS date)),
            ( CAST( '20190203' AS date)),
            ( CAST( '20190204' AS date)),
            ( CAST( '20190205' AS date)),
            ( CAST( '20190206' AS date)),
            ( CAST( '20190207' AS date)),
            ( CAST( '20190208' AS date)),
            ( CAST( '20190209' AS date)),
            ( CAST( '20190210' AS date)),
            ( CAST( '20190211' AS date)),
            ( CAST( '20190212' AS date)),
            ( CAST( '20190213' AS date)),
            ( CAST( '20190214' AS date)),
            ( CAST( '20190215' AS date)))x(calDate);

关于sql-server - 用于选择超过 3 天但不包括周末(周六和周日)的记录的 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655156/

相关文章:

sql - 使用递归 CTE 处理日期逻辑

sql-server - SQL Server - 即使在回滚的情况下如何确保身份字段正确递增

sql-server - SSRS 订阅失败 rsProcessingAborted

sql-server - 如何从 VS 2012 数据库项目创建部署脚本?

mysql - 垂直分区 VS 水平分区有什么好处?

sql - 查找包含多个长格式条件的 ID

sql - 最好的 sql server 客户端工具和刷新管理工作室编辑窗口?

c# - 关闭主线程

c# - 确定日期字段是否包含 NULL 值

sql-server - SQL Server 与 Oracle