2015-12-04 156 views
1

我需要從前一天獲得的數據,如果是星期二,那麼我需要週一的數據,這我已經完成了這個聲明,它的工作原理:從以前的日期選擇數據,但排除星期六和星期日在sql

Date >= dateadd(day,datediff(day,1,GETDATE()),0) 
     AND Date < dateadd(day,datediff(day,0,GETDATE()),0) 

但我的問題是,如果它是星期一那麼我需要從週五沒有從週日的數據,我怎麼能做到這一點。我使用SQL Server 2010的

感謝, 問候 梅奧

+0

哪個DBMS您使用的? (當涉及到日期/時間時,太多的dbms產品遠不符合ANSI SQL標準) – jarlh

回答

0

在SQL Server,你可以使用DATEPART返回表示星期幾的整數。

默認情況下,星期的開始爲星期日,返回1,因此星期一返回2。我默認說,因爲我應該提請你注意SET DATEFIRST命令,如果使用它可以改變默認行爲。儘管它可能不會影響你的特定情況,但請注意這一點。

然後一個簡單的case語句提供相關今天偏移昨天應該給,或在星期一,將扣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 
相關問題