sql - 从我的查询中排除周末

标签 sql sql-server select getdate datepart

我有一个运行良好的查询。 该查询基本上检索当前日期之后 6-8 天之间的数据。我想在测量数据的年龄时排除周末。

示例:如果周五注册了一条记录,那么周一早上它会显示为 4 天前的记录,但实际上只有 2 天前的记录,因为周六和周日不应该计算在内。

我尝试了这个,但似乎不起作用:

Select id, name, CreatedDate
from table
where 
CreatedDate <= DATEADD(day, -6, GETDATE()) AND CreatedDate >= DATEADD(day, -8, GETDATE()) -- here I get data between 6-8 days old
 AND ((DATEPART(dw, CreatedDate) + @@DATEFIRST) % 7) NOT IN (0, 1) -- Here im trying to exclude weekends

我做错了什么?

最佳答案

您可以查看日历并尝试此查询

// Logic is very simple. 
// See calendar and try.
// If today is Monday, then Prev8workingdays will include 
// 8 working days + 2 weekends = 12 days. 
// Then result will be dateadd(day,-12, getdate()) = 12 days before today.
// Same logic for other days week
DECLARE @Prev8workingdays date = CASE
    WHEN datepart(dw, getdate()) IN (2,3,4) THEN dateadd(day,-12, getdate()) 
    WHEN datepart(dw, getdate()) IN (1) THEN dateadd(day,-11, getdate()) 
    ELSE dateadd(day,-10, getdate())
    END
DECLARE @Pre6WorkingDay date = CASE
        WHEN datepart(dw, getdate()) IN (2) THEN dateadd(day,-10, getdate()) 
        WHEN datepart(dw, getdate()) IN (1) THEN dateadd(day,-9, getdate()) 
        ELSE dateadd(day,-8, getdate())
    END

SELECT sd.* FROM
@SampleDate sd
WHERE sd.CreatedDate >= @Prev8workingdays AND sd.CreatedDate <= @Pre6WorkingDay

引用链接DATEADD

关于sql - 从我的查询中排除周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324492/

相关文章:

sql-server - SQL 结果中的字体大小到 Visual Studio 中的 GridView

javascript - AngularJs:无法以编程方式设置在选择中选择的选项

由于未完成的语句,c++ sqlite3_exec 无法关闭

mysql - 查找表中的所有重复行

mysql - 使用sql生成组合

sql - T-SQL 中的 RaiseError 命令

c# - 如何在测试运行之前创建一个新的数据库?

sql - SQL Server中使用LIKE关键字进行排名

c - Linux 中的 Select 循环——如何让它变得更好?

php - 合并来自两个 MySQL 表的数据并使用 PHP 回显结果