Аргументы вы ссылаетесь являются:
firstdayofweek
опущен, предполагается, что доступ в воскресенье первый день недели. Этот параметр может быть одним из следующих значений:
Constant Value Explanation
------------------------------------------------
vbUseSystem 0 Use the NLS API setting
vbSunday 1 Sunday (default)
vbMonday 2 Monday
vbTuesday 3 Tuesday
vbWednesday 4 Wednesday
vbThursday 5 Thursday
vbFriday 6 Friday
vbSaturday 7 Saturday
эквивалент в SQL Server SET DATEFIRST
, обратите внимание, что это начинается в понедельник, а не воскресенье, так что следующий будет возвращать 2 (так как сегодня вторник);
SET DATEFIRST 1;
SELECT [WEEKDAY] = DATEPART(WEEKDAY, CAST('2015-08-11' AS DATE));
Следующий аргумент:
firstweekofyear
Дополнительно. Это константа, указывающая первую неделю года. Если этот параметр опущен, Access предполагает, что неделя, содержащая 1 января, является первой неделей года. Этот параметр может быть одним из следующих значений:
Constant Value Explanation
---------------------------------------------------------------------------
vbUseSystem 0 Use the NSL API setting
vbFirstJan1 1 Use the first week that includes Jan 1st (default)
vbFirstFourDays 2 Use the first week in the year that has at least 4 days
vbFirstFullWeek 3 Use the first full week of the year
Стандарт DATEPART(WEEK, @Date)
является эквивалентом vbFirstJan1
, это приведет к сбросу номер недели на первом из Jan, то после этого увеличивается на 1 при каждом прохождении независимо устанавливается как DATEFIRST
.
clostest эквивалентно vbFirstFourDays
является использование DATEPART(ISO_WEEK, @Date)
, то стандарт ISO определяет первую неделю года в первой неделе, чтобы содержать 4 дня, это не совсем эквивалентно, поскольку это не влияет на DATEFIRST
, стандарт определяет ISO неделя как понедельник до воскресенья, поэтому ISO_WEEK
также делает, независимо от DATEFIRST
или региональных настроек.
Нет эквивалента на уровне vbFirstFullWeek
.
Я нашел, что это обычно бизнес-логика, которая диктует любые отклонения от этих стандартных определений чисел недели или числа дней, так как это почти всегда лучше всего обрабатывается путем создания себя calendar table, после чего вы можете добавить свой новый столбец в его и запустить одно обновление. Например, мне приходилось сообщать в течение недель, начиная с четверга по среду, для комиссионных платежей, где первая неделя года была определена как первая полная неделя (так что в доступе это будет DATEPART("ww", [Date], 4, 5)
), без эквивалентной функции в MS SQL Я добавил новый столбец в таблице расписания PaperSalesCommissionWeekNumber
, тогда я мог бы присоединиться к моему столу календаря, чтобы получить номер недели:
SELECT c.PaperSalesCommissionWeekNumber
FROM dbo.Deal AS d
INNER JOIN dbo.Calender AS c
ON d.DealDate = c.DateKey;
вы попробовать это - https://msdn.microsoft.com/en-us /library/ms174420.aspx? – Bulat
Да, вот где я начал. К сожалению, эта функция не принимает эти два необязательных параметра (firstdayofweek и firstweekofyear), и результаты разные. Чтобы дать вам идею, я собрал быстрый образец (один в доступе в SQL), чтобы увидеть результаты, и если я поставлю дату 4/1/2014, доступ дает мне неделю 13, SQL дает мне неделю 14 Но если я подключу дату 4/1/2013, оба дают мне 14, так что это не так просто, как просто вычитать один из результата SQL. – Scott
Вы видели это? https://msdn.microsoft.com/en-us/library/ms181598.aspx – Bulat