如何获取上周日到周六的日期

Posted

技术标签:

【中文标题】如何获取上周日到周六的日期【英文标题】:How to get the date from last Sunday to Saturday 【发布时间】:2014-04-30 15:05:24 【问题描述】:

我将在我的表中输入带有如下数据的日期:

Date          Value
4-20-2014     45
4-21-2014     15
4-22-2014     35
...
4-30-2014     109

我将在每个星期日执行我的存储过程,这意味着我想从上一个星期日到昨天(星期六)获取带有 Date 的行。

我有以下查询,它将从上周日到上周六得到,我认为这是错误的,所以我将其修改如下:

INSERT INTO [database].[dbo].[table]
SELECT (WEEKENDING DATE) AS [Date], SUM([ORDERS]) AS Orders, SUM([B ORDERS]) AS bOrders, SUM([RESULT]) AS Results
FROM [database].[dbo].[origtable]
WHERE
    [Date] >= "PREVIOUS SUNDAY DATE"
    AND
    [Date] <= "SATURDAY DATE (YESTERDAY)"

我想获得以下方面的帮助:

    [Date] >= "PREVIOUS SUNDAY DATE"
    AND
    [Date] <= "SATURDAY DATE (YESTERDAY)"

因此,如果我在 5/4/2014 上运行 SP,它将在周日 (4/27/2014) 到周六 (5/3/2014) 之间抓取

这行得通吗:

INSERT INTO [Database].[dbo].[table]
SELECT 
    CONVERT(VARCHAR(10), GETDATE(), 101) AS [Date], 
    SUM([EMR ORDERS]) AS LastWeekEMROrders, 
    SUM([ACCESSIONED LAB ORDERS]) AS LastWeekAccLabOrders, 
    SUM([LAB_RESULT]) AS LastWeekLabResults
FROM [database].[dbo].[origtable]
WHERE
    [Date] >= DATEADD(day, -((DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7) - 6,
              DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) --PREVIOUS SUNDAY
    AND
    [Date] <= DATEADD(day, -(DATEPART(dw, GETDATE()) + @@DATEFIRST) % 7,
              DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) --PREVIOUS SATURDAY

如果我有以下查询并在 2014 年 5 月 4 日执行:

set @startdate = DATEADD(wk, DATEDIFF(wk, 0, getdate()), -2) --for sunday
set @enddate = DATEADD(wk, -1, DATEADD(wk, DATEDIFF(wk, 0,getdate()), -1))-- for saturday

星期天和星期六是几号?

【问题讨论】:

你为什么不直接使用case语句? 是的,过去 7 天。我在问题的底部添加了到目前为止的内容,请让我知道它是否有效。 您是否尝试过执行选择(没有插入)以查看发生了什么 目前显示的是上周日的日期,即 4/27/ 但我会等到周一才能看到是哪个日期。 您的 [Date] 列是否只有日期信息?没有日期时间? 【参考方案1】:

尝试以下修改后的查询:

编辑: 该查询已进一步修改为不使用 DATEFROMPARTS。

INSERT INTO [Database].[dbo].[table]
SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS [Date], SUM([EMR ORDERS]) AS LastWeekEMROrders, SUM([ACCESSIONED LAB ORDERS]) AS LastWeekAccLabOrders, SUM([LAB_RESULT]) AS LastWeekLabResults
FROM [database].[dbo].[origtable]
WHERE
    [Date] >= DATEADD(d, -8, DATEADD(dd, DATEDIFF(dd,0, current_timestamp), 0)) --PREVIOUS SUNDAY
AND
    [Date] <= DATEADD(d, -1, DATEADD(dd, DATEDIFF(dd,0, current_timestamp), 0)) --PREVIOUS SATURDAY;

参考文献

Date and Time Data Types and Functions (Transact-SQL) on TechNet

Related SO question

【讨论】:

UPVOTED 但datefromparts 未被识别。我正在使用 SQL Server 2012 你得到什么错误?也许语法/括号不正确? technet.microsoft.com/en-us/library/hh213228.aspx 谢谢,我确实检查了这篇文章,但 datefromparts 不是公认的功能。 您是否收到错误消息?只运行 SELECT 语句会发生什么? 请看上面查询的修改版本。实际上,条件现在读起来更简单了。

以上是关于如何获取上周日到周六的日期的主要内容,如果未能解决你的问题,请参考以下文章

上周日到下周六的 DB2 语句之间

C#如何获取上周六日期

在 PHP 中获取上周日的日期

java获取本周 上周的所有日期

获取两个日期范围内的上周日(GMT、DST)

sql如何通过当前日期获取上周,上上周,上上上周的起始日期(周一_周七)