2015-06-23 2 views
0

У меня есть сложный календарь, исходящий из SQL-запроса, где у меня есть год, месяц и неделяNumOfMonth (что означает номер недели с начала месяца).SQL Server: получите день месяца из года Месяц WeekOfMonth

Мне нужна функция, чтобы вернуть DayOfMonth (то есть: значения между 1-28,29,30 или 31 в зависимости от месяца) с учетом Year, month и WeekNumOfMonth.

Я видел функции, которые выполняют это задание WeekNum с начала года, но у меня есть только WeekNum данного месяца. Я просто не могу представить функции datePart и dateAdd правильно. Любая помощь будет оценена по достоинству.

+0

, пожалуйста, покажите образец некоторых дат и желаемых результатов, как из того, что вы сказали, я не могу понять, как определить день месяца, если у вас есть только неделя, так как это будет 1 из 7 дней ? какую логику вы собираетесь использовать, чтобы сузить это? ты просто хочешь первый день? – Tanner

+0

Комбинированный год + месяц + число недель в месяц не даст вам дня. Это даст вам целых семь дней на этой неделе. –

+0

мой запрос следующий: SELECT TOP [YR], [MonthNum], [WeekOfMonth], [sun], [mo], [tu], [we], [th], [fr], [sa] FROM [ vwBookingsForMonth] , поэтому есть одна строка за каждую неделю месяца. Если я укажу дату, данные будут соединены несколько раз. Я пытаюсь заполнить контрольный элемент управления заказами на месяц в очень компактном формате, чтобы его можно было легко распечатать. Я собираюсь попробовать @ arunprasanth1111 предложение, и я дам вам знать. – KellyK

ответ

0

Примечание: Комбинация года, месяц, неделя Номер не даст вам имя дня, потому что неделя содержит более чем на один день, так как вы можете найти какой день это? это не возможно

пример:year 2015 month 06 week number 1

то есть сочетание

1 monday 
2 tuesday 
3 wednesday 
4 thursday 
5 friday 
6 saturday 

затем с этими результатами, как вы можете predit точный день ??

Else нужны условия или ограничения

Если у вас есть год, месяц и дата, то вы можете найти название дня, используя приведенный ниже запрос будет давать начальную и конечную дату недели, то вы можете взять даты с даты начала и заканчивается датой окончания

SELECT (
    DATENAME(dw, 
    CAST(DATEPART(m, GETDATE()) AS VARCHAR) 
    + '/' 
    + CAST(DATEPART(d, '2015-06-23') AS VARCHAR) 
    + '/' 
    + CAST(DATEPART(yy, getdate()) AS VARCHAR)) 
) 

Update

Если вам нужны все дни между текущей недели, используйте следующий запрос

DECLARE 
    @Year INT, 
    @Week INT, 
    @FirstDayOfYear DATETIME, 
    @FirstMondayOfYear DATETIME, 
    @StartDate DATETIME, 
    @EndDate DATETIME 

SET @Year = 2015 
SET @Week = 24// week number is based on year and it is not based on month 

-- Get the first day of the provided year. 
SET @FirstDayOfYear = CAST('1/1/' + CAST(@YEAR AS VARCHAR) AS DATETIME) 

-- Get the first monday of the year, then add the number of weeks. 
SET @FirstMondayOfYear = DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(DAY, 6 - DATEPART(DAY, @FirstDayOfYear), @FirstDayOfYear)), 0) 

SET @StartDate = DATEADD(WEEK, @Week - 1, @FirstMondayOfYear) 

-- Set the end date to one week past the start date. 
SET @EndDate = DATEADD(WEEK, 1, @StartDate) 

SELECT @StartDate AS StartDate, DATEADD(SECOND, -1, @EndDate) AS EndDate 

Update

, если не год число недель, то используйте приведенные ниже запрос,

DATEPART(WEEK,'2015-06-01') 

Этот запрос является одним из примеров

В запросе есть два значения то есть Year и Month

вам нужно только третье значение, которое означает дату

как метод, вы можете дать 01 в качестве даты, то это даст начиная номер недели выбранный месяц

здесь это приведет к 23 так что у вас есть идея в 2015 - месяц 06 начинается с недели номер 23, так что вы можете легко делать свои вещи

Идея: если номер вашей недели равен 1, тогда возьмите 23 недели, если это 2, а затем 24, как мудрый ..

+0

ОП очень четко говорит: «У меня только WeekNum данного месяца». Это не сработает для него – Raj

+0

Надеюсь, если у него будет номер недели и номер месяца, тогда он найдет номер недели в году. Вы правы, я не буду предоставлять код для этого. Но он может это сделать, если он возьмет какой-то эфр .. я прав? исправьте меня, если я ошибаюсь –

+0

Трудно сказать. Если месяц начинается в четверг, то делаете ли первые три дня неделю в неделю или нет? – Raj

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