-1

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

将创建一个内联视图,该视图将在 SQL 中返回上一个日期它将根据当前日期返回 1 到 3 行。

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

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

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

样本选择查询

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

3 回答 3

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
于 2013-04-10T16:33:19.683 回答
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)
于 2013-04-10T17:01:45.777 回答
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
于 2018-03-19T14:26:21.390 回答