使用存储过程将星期一计算为一周的第一天
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 并返回计数的函数。以上是关于使用存储过程将星期一计算为一周的第一天的主要内容,如果未能解决你的问题,请参考以下文章