SQL Server在一周内获得价值

时间:2011-01-15 14:21:20

标签: sql sql-server ms-access

我需要一些指导,以便在一周的时间内从数据库中获取价值。我已经弄清楚如何使用DATEPART我可以做DATEPART(wk, date_value) = DATEPART(datepart, GETDATE()),但我无法弄清楚如何在一周中的特定日期进行操作。就像我只想从本周二到下周二检索信息。任何人都可以提供任何指导吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在SQL Server中,您可以执行以下操作:

Set DateFirst 1;

Select DateAdd(d, -DatePart(dw, CURRENT_TIMESTAMP) + 3
        , CURRENT_TIMESTAMP) As ThisWeekTuesday
    , DateAdd(d, 7, DateAdd(d, -DatePart(dw, CURRENT_TIMESTAMP) + 3
        , CURRENT_TIMESTAMP)) As TuesdayAfterThat

在MIcrosoft Access中,您可以执行以下操作:

Select DateAdd("d", -DatePart("w", Now()) + 3, Now()) As ThisWeekTuesday
    , DateAdd("d", 7, DateAdd("d", -DatePart("w", Now()) + 3
        , Now())) As TuesdayAfterThat

答案 1 :(得分:0)

我建议创建一个Dates表 - 每天存储一条记录,包含SQLDate,DateAsText,Year,Month,MonthAsText,DayOfWeek,DayOfWeekAsText等字段。然后你可以像这样查询:

SELECT
  MIN(SQLDate)
FROM
  Dates
WHERE
      SQLDate > SYSDATETIME()
  AND DayOfWeekText = 'Tuesday'

如果你现在不想这样做,你也可以使用DATEPART()和DATEADD()。对于下周二,我相信这将是:

DECLARE @TodaysDayOfWeek = DATEPART(DW, SYSDATETIME())
SELECT
  CASE WHEN @TodaysDayOfWeek < 3 DATEADD( 3 - @TodaysDayOfWeek, SYSDATETIME())
       ELSE                      DATEADD(10 - @TodaysDayOfWeek, SYSDATETIME() END

我没有MS SQL方便确认这一点,但是如果DW在星期日从1开始到星期六以7结束(这可能因你的配置而异),它应该可以工作。请注意,如果在星期二调用它将在星期二提供 next ,而不是今天;要反转此行为,请将“&lt; 3”更改为“&lt; = 3”。