2013-12-10 6 views
0

У меня есть код C#, чтобы поднять количество сообщений, созданных за последнюю неделю, и работает нормально. Но он подтягивает счет с «последних 7 дней»; то, что я хочу сделать, - установить первый день недели на «понедельник», чтобы, когда мы подтягиваем счет публикации на «неделю», он должен вытащить номер с «понедельника до воскресенья» вместо дефолта «последний 7 дней".Рассчитайте понедельник как первый день недели с хранимой процедурой

Я создал класс, чтобы установить в понедельник, как 1-й день недели, но то, что я хочу знать, как я могу (если я могу) инкапсулирует этот метод в этом коде, чтобы просто тянуть счет размещения и т.д.

Вот мой код:

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 
+0

thnx, я почти решил свою проблему, меня беспокоит только то, что таким образом, публикации, сделанные в понедельник 9-го декабря. также показывает на прошлой неделе, его подсчет только с самого вторника, но я думаю, что я это выясню отсюда, thnx за помощь – shubby

+0

Нет проблем. Извините, я не мог больше помочь. – Nurvx

0
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 дней начиная с последнего понедельника, итерации в течение последних 7 дней на C#, пока вы не нажмете понедельник, а затем передайте эту дату в SQL Proc.

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

Это не получить понедельник –

+0

@zenacity, и может у пожалуйста, дайте мне представление о том, как я могу добиться того, что в C#, как и я упомянутый класс в моем коде для этого – shubby

+0

Извините, отредактировал мой ответ, чтобы показать итерацию – Zenacity

Смежные вопросы