Как я могу запускать еженедельные отчеты из моей хранимой процедуры? - PullRequest
0 голосов
/ 16 марта 2012

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

В таблице timesheets есть start_dtm и end_dtm

Как запустить запрос для проверки начала и конца недели?

edit: у меня есть следующий код, который берет дату начала и окончания:

---------------------------------
--Please set your appropriate values for @REPORT_DATE and @WEEK_BEGINING
DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10)
SELECT @REPORT_DATE = '2012-03-16T00:00:00'
SELECT @WEEK_BEGINING = 'MONDAY'
IF @WEEK_BEGINING = 'MONDAY'
SET DATEFIRST 1
ELSE IF @WEEK_BEGINING = 'TUESDAY'
SET DATEFIRST 2
ELSE IF @WEEK_BEGINING = 'WEDNESDAY'
SET DATEFIRST 3
ELSE IF @WEEK_BEGINING = 'THURSDAY'
SET DATEFIRST 4
ELSE IF @WEEK_BEGINING = 'FRIDAY'
SET DATEFIRST 5
ELSE IF @WEEK_BEGINING = 'SATURDAY'
SET DATEFIRST 6
ELSE IF @WEEK_BEGINING = 'SUNDAY'
SET DATEFIRST 7
DECLARE @WEEK_START_DATE DATETIME, @WEEK_END_DATE DATETIME
--GET THE WEEK START DATE
SELECT @WEEK_START_DATE = @REPORT_DATE - (DATEPART(DW, @REPORT_DATE) - 1)
--GET THE WEEK END DATE
SELECT @WEEK_END_DATE = @REPORT_DATE + (7 - DATEPART(DW, @REPORT_DATE))
PRINT 'Week Start: ' + CONVERT(VARCHAR, @WEEK_START_DATE)
PRINT 'Week End: ' + CONVERT(VARCHAR, @WEEK_END_DATE)
----------------------------------------------

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Вы можете использовать этот SQL для определения понедельника и пятницы недели данной даты.

SET DATEFIRST 1
DECLARE @Date date = GETDATE() --give a date here

SELECT
    @Date [SelectedDate], 
    DATENAME(dw, @Date) [SelectedWD],
    DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) [WeekStart],
    DATENAME(dw, DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date)) [WeekStartWD],
    DATEADD(dd, 7-(DATEPART(dw, @Date)+2), @Date) [WeekEnd],
    DATENAME(dw, DATEADD(dd, 7-(DATEPART(dw, @Date)+2), @Date)) [WeekEndWD]

**Example output**
SelectedDate    SelectedWD  WeekStart   WeekStartWD WeekEnd     WeekEndWD
2012-03-16      Friday      2012-03-12  Monday      2012-03-16  Friday

-------------------------------------------- - РЕДАКТИРОВАТЬ ---------------------------------------------
1008 * ИСПОЛЬЗОВАНИЕ *

Это дает вам результаты за 1 неделю (только по рабочим дням)

SET DATEFIRST 1
DECLARE @Date date = GETDATE() --give a date here
DECLARE @WeekStart Date, @WeekEnd Date

select @WeekStart = DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date),
@WeekEnd = DATEADD(dd, 7-(DATEPART(dw, @Date)+2), @Date)

SELECT * FROM myTable WHERE myDate BETWEEN @WeekStart AND @WeekEnd
1 голос
/ 16 марта 2012

Как именно вы напишите запрос, будет зависеть от ваших требований - при запуске отчета и т. Д. Изучите функцию DateAdd и / или ключевое слово BETWEEN .

...