Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 номер недели года .Первая неделя, которая содержит по крайней мере четыре дня нового года.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
в стандартной функции VB есть доп параметр
? DatePart("ww", #01/01/2005#, vbMonday,vbFirstFourDays )
53
Ниже перечислены допустимые значения аргумента firstweekofyear:

Константа Значение Описание
vbUseSystem 0 Используется значение NLS API.
vbFirstJan1 1 Неделя, которая содержит 1 января (по умолчанию).
vbFirstFourDays 2 Первая неделя, которая содержит по крайней мере четыре дня нового года.
vbFirstFullWeek 3 Первая полная неделя года.

select DATEPART(week,'20050101')
получаю 1
т.е. аналогично
? DatePart("ww", #01/01/2005#, vbMonday,vbFirstJan1)

Есть ли в T-SQL стандартная фича чтобы получить аналог vbFirstFourDays
пока сделал так
SET DATEFIRST 1
select CASE WHEN DATEPART(weekday,'20050101')>4 THEN блаблабла
Но гложет ощущение корявости
3 ноя 05, 13:50    [2035537]     Ответить | Цитировать Сообщить модератору
 Re: номер недели года .Первая неделя, которая содержит по крайней мере четыре дня нового года.  [new]
Брюлик
Member

Откуда:
Сообщений: 690
Bol says
CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
SET @ISOweek= DATEPART(wk,@DATE)+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
3 ноя 05, 13:56    [2035591]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить