在sql中选择上一日期的数据,但不包括星期六和星期日

在sql中选择上一日期的数据,但不包括星期六和星期日,sql,reporting-services,Sql,Reporting Services,我需要获取前一天的数据,如果是星期二,那么我需要星期一的数据,我已经完成了这个声明,它可以工作: Date >= dateadd(day,datediff(day,1,GETDATE()),0) AND Date < dateadd(day,datediff(day,0,GETDATE()),0) Date>=dateadd(day,datediff(day,1,GETDATE()),0) 和Date=@fromDate和日期

我需要获取前一天的数据,如果是星期二,那么我需要星期一的数据,我已经完成了这个声明,它可以工作:

Date >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND Date < dateadd(day,datediff(day,0,GETDATE()),0) 
Date>=dateadd(day,datediff(day,1,GETDATE()),0)
和Date
但我的问题是,如果是周一,那么我需要周五的数据,而不是周日的数据,我怎么能做到这一点。我正在使用SQLServer2010

谢谢, 顺致敬意,
mayo

使用SQL Server,您可以使用它返回表示一周中某一天的整数

默认情况下,一周的开始是星期天,返回
1
,因此星期一返回
2
。我之所以说默认,是因为我应该提请您注意这个命令,如果使用它,它可以改变默认行为。请注意这一点,尽管它可能不会影响您的特定情况

然后,一个简单的案例陈述,提供了从今天开始的相关抵消,应该是昨天,或者周一,减去3天,得到上一个周五:

-- Calculate your FROM date i.e. the previous week day
DECLARE @fromDate DATETIME
DECLARE @toDate DATETIME

SET @fromDate = SELECT DATEADD(DAY, CASE WHEN datepart(dw,getdate()) = 2 THEN -3 ELSE -1 END, GETDATE()) 

-- To remove the time portion then embed this into your original syntax
SET @fromDate = SELECT DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(DAY, CASE WHEN datepart(dw,getdate()) = 2 THEN -3 ELSE -1 END, GETDATE())), 0)

-- Add one day to @fromDate to get the To Date
SET @toDate = DATEADD(day, 1, @fromDate)

-- Final selection simply becomes
Date >= @fromDate AND Date < @toDate
——计算起始日期,即前一周的日期
声明@fromDate DATETIME
声明@toDate DATETIME
SET@fromDate=选择DATEADD(日期,datepart(dw,getdate())时的大小写=2,然后-3 ELSE-1 END,getdate())
--要删除时间部分,请将其嵌入原始语法中
SET@fromDate=选择DATEADD(DAY,DATEDIFF(DAY,0,DATEADD(DAY,datepart(dw,getdate())=2,然后-3 ELSE-1 END,getdate()),0)
--将一天添加到@fromDate以获取截止日期
设置@toDate=DATEADD(天,1,@fromDate)
--最终的选择只会变得简单
日期>=@fromDate和日期<@toDate
您正在使用哪些数据库管理系统?(太多的dbms产品在日期/时间上远远不符合ANSI SQL…)没有SQL Server 2010版本—我们有2000、2005、2008、2008、2012、2014、2016和2017—请随意选择。。。。。