在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
來源
2015-12-04 08:45:11
CSL
哪個DBMS您使用的? (當涉及到日期/時間時,太多的dbms產品遠不符合ANSI SQL標準) – jarlh