获取昨天的日期,如果周一获得SQL服务器的周末范围

时间:2013-04-10 15:50:49

标签: sql sql-server sql-server-2008

我如何获得昨天的日期,如果当前日期是星期一,我需要星期日,星期六和星期五。已经询问here ms访问。我现在需要这个用于SQL服务器。我该怎么做呢?

将创建一个将在SQL中返回上一个日期的内联视图它将返回1到3行,具体取决于当前日期。

如果当前日期是星期一返回:

Sundays date
Saturdays date
Fridays date
  • 如果当前日期是星期二,则返回:星期一日期
  • 如果当前日期是星期三,则返回:星期二日期
  • 如果当前日期是星期四,则返回:星期三日期
  • 如果当前日期是星期五,则返回:星期四日期
  • 如果当前日期是星期六,则返回:星期五日期
  • 如果当前日期是星期日,则返回:星期六日期

我希望这有助于解释我想要做的更清楚。

样本选择查询

--get previous date
select * from [Purchase Orders] where MyDate in (previous date(s))

3 个答案:

答案 0 :(得分:0)

虽然不完全清楚这个问题。但你可以在类似的路线上做点什么 使用DATEPARTDATEADD

DECLARE @TodaysDate DATETIME
SET @TodaysDate = '2013-04-10'


SELECT CASE 
     WHEN DATEPART (DW, DATEADD (DD, -1, @TodaysDate )) IN (1, 6, 7) 
     THEN 'WeekEnd' ELSE 'WeekDay' 
     END D

答案 1 :(得分:0)

使用您链接的查询,您可以尝试以下代码:

SELECT * 
  FROM [Purchase Order] 
 WHERE MyDate >= CASE 
                     WHEN DATENAME(dw, CONVERT(CHAR(8), GETDATE() , 112)) LIKE 'Monday' THEN CONVERT(CHAR(8), DATEADD(dd, -3, GETDATE()), 112)
                     ELSE CONVERT(CHAR(8), DATEADD(dd, -1, GETDATE()), 112)
                 END 
   AND MyDate < CONVERT(CHAR(8),GETDATE(),112)

答案 2 :(得分:0)

您可以使用以下表格功能:

CREATE FUNCTION dbo.ufnPreviousDay (@suppliedDate DATE)
RETURNS @PreviousDates TABLE (PreviousDate DATE)
AS
BEGIN

    INSERT INTO @PreviousDates (
        PreviousDate)
    SELECT
        PreviousDate = DATEADD(DAY, -1, @suppliedDate)

    IF DATEPART(WEEKDAY, DATEADD(DAY, @@DATEFIRST - 1, @suppliedDate)) = 1 -- If Monday
    BEGIN

        INSERT INTO @PreviousDates (
            PreviousDate)
        SELECT
            PreviousDate = DATEADD(DAY, -2, @suppliedDate)
        UNION ALL
        SELECT
            PreviousDate = DATEADD(DAY, -3, @suppliedDate)

    END

    RETURN

END

你可以像这样使用它:

SELECT
    T.*
FROM
    dbo.ufnPreviousDay('2018-03-19') AS T

/*
Result:
    2018-03-18
    2018-03-17
    2018-03-16
*/

如果你想要今天的日期:

SELECT
    T.*
FROM
    YourTable AS T
    INNER JOIN dbo.ufnPreviousDay(GETDATE()) AS M ON T.MyDate = M.PreviousDate