使用存储过程将星期一计算为一周的第一天

Posted

技术标签:

【中文标题】使用存储过程将星期一计算为一周的第一天【英文标题】:Calculate Monday as first day of the week with a stored procedure 【发布时间】:2013-12-10 19:32:52 【问题描述】:

我有这个 C# 代码来提取上周创建的帖子数量,这工作正常。但它从“过去 7 天”开始增加计数;我想要做的是将一周的第一天设置为“星期一”,这样当我们拉起“一周”的发帖次数时,它应该从“周一到周日”中拉出数字,而不是默认的“最后一天” 7 天”。

我创建了一个类来将星期一设置为一周的第一天,但​​我想知道的是如何(如果可以)将该方法封装在此代码中以简单地提取发布等计数

这是我的代码:

if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)

    lblJobPostings.Text = ds.Tables[0].Rows[0]["new_job_posting_this_week"].ToString();

if (ds.Tables[1] != null && ds.Tables[1].Rows.Count > 0)

    lblNewEmployers.Text = ds.Tables[1].Rows[0]["new_employer_this_week"].ToString();

if (ds.Tables[2] != null && ds.Tables[2].Rows.Count > 0)

    lblNewInstitutes.Text = ds.Tables[2].Rows[0]["new_institutes_this_week"].ToString();


public static DateTime CallFirstDayOfWeek(DateTime input)

   int Delta = (7 - (DayOfWeek.Monday - input.DayOfWeek)) % 7;
   return input.AddDays(-Delta);

存储过程:

select COUNT(od.id) [new_job_posting_this_week] 
from rs_job_posting od
where od.date_created = GETDATE()-7

【问题讨论】:

【参考方案1】:

在你的存储过程中试试这个:

DECLARE @CurrentWeekday AS INT
DECLARE @LastSunday AS DATETIME
DECLARE @LastMonday AS DATETIME

SET @CurrentWeekday = DATEPART(WEEKDAY, GETDATE())
// Count backwards from today to get to the most recent Sunday.
// (@CurrentWeekday % 7) - 1 will give the number of days since Sunday; 
// -1 negates for subtraction.
SET @LastSunday = DATEADD(DAY, -1 * (( @CurrentWeekday % 7) - 1), GETDATE())
// Monday is obviously one day after last Sunday.
SET @LastMonday = DATEADD(DAY, 1, @LastSunday)

SELECT COUNT(od.id) [new_job_posting_this_week] 
FROM rs_job_posting od
WHERE od.date_created >= @LastMonday

【讨论】:

thnx,它几乎解决了我的问题,唯一困扰我的是,通过这种方式,12 月 9 日星期一发布的帖子。上周也出现了,它只从星期二开始计算,但我想我会从这里算出来,谢谢帮助 没问题。抱歉,我无法提供更多帮助。【参考方案2】:
select COUNT(od.id) [new_job_posting_this_week] 
from rs_job_posting od
where od.date_created Between Convert(DateTime, DATEADD(D,-7,GETDATE())) And Convert(DateTime, GetDate())

要选择从上周一开始的 7 天,请在 C# 中遍历最后 7 天,直到到达周一,然后将该日期传递到 SQL Proc。

for (int i = 0; i < 7; i++)
            
                DateTime mydate = DateTime.Now.AddDays(-1);
                if (mydate.DayOfWeek == DayOfWeek.Monday)
                
                    //call sp here
                
            

【讨论】:

这不是星期一 @zenacity,你能告诉我如何在 c# 中实现这一点,因为我还在我的代码中提到了一个类 @zenacity...考虑到我拥有的代码,从单独的方法中调用它不是更容易吗? 是的,我会在 C# 中创建一个包含迭代、调用您的 SP 并返回计数的函数。

以上是关于使用存储过程将星期一计算为一周的第一天的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 自定义一周的第一天(默认为星期一)

需要星期日作为一周的第一天

为啥在使用 NSCalendarUnitEra 时 ordinalityOfUnit 使用星期一作为一周的第一天?

JS学校里怎么计算本周是该年的第几周

在 SQL Server 中获取一周的第一天

Excel中如何计算日期所在的这年的第几周,以周一作为一周的第一天