AXForum  
Zurück   AXForum > Microsoft Dynamics NAV > NAV: Функционал
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 28.01.2010, 14:07   #1  
Lates ist offline
Lates
Участник
 
207 / 10 (1) +
Registriert seit: 08.02.2007
Добрый день!

Столкнулся с такой проблемой. В запросе SQL при выводе номера недели текущая неделя (28.01.2010) считается 4-ой.
Но некоторые люди, смотря на календарь, считают эту неделю 5-ой.
Проблема возникает из-за того, что текущий год начался с пятницы. А согласно ГОСТу ИСО 8601-2001:

Неделя начинается с понедельника и идентифицируется своим порядковым номером в году. Первой календарной неделей года считают первую неделю, содержащую первый четверг текущего года. В григорианском календаре — это неделя, содержащая 4 января.

И вроде все ясно и понятно. Только хочется найти решение, которое поможет SQLю изменить взгляд на мир и сказать что 28.01.2010 относится все-таки к пятой неделе.

Нет ли у кого идей на этот счет?
Alt 28.01.2010, 15:17   #2  
Lates ist offline
Lates
Участник
 
207 / 10 (1) +
Registriert seit: 08.02.2007
Сори - немного перепутал
SQL считает текущую неделю 5-ой.
А надо чтобы она стала для него 4-ой.

Наверное воспользуемся условием - для 2010 года будем у недели отнимать единицу.
Alt 28.01.2010, 20:18   #3  
Alterant ist offline
Alterant
Участник
 
378 / 10 (1) +
Registriert seit: 31.03.2004
Если SQL 2008-ой, то используйте параметр 'isowk' функции DATEPART, если нет, то используйте вот эту функцию:

Code:
CREATE FUNCTION dbo.udf_GetISOWeekNumberFromDate(@dtDate as DATETIME) RETURNS INT WITH RETURNS NULL ON NULL INPUT
/*
** Return the ISO week of the year regardless of the DATEFIRST session setting.
*/
AS
BEGIN

DECLARE @intISOWeekdayNumber INT
DECLARE @dtThisThursday DATETIME
DECLARE @dtFirstOfThisThursdaysYear DATETIME
DECLARE @intISOWeekdayNumberOfFirstOfThisThursdaysYear INT
DECLARE @dtFirstThursdayOfYear DATETIME
DECLARE @intISOWeekNumber INT

 -- Get the ISO week day number (Monday = 1) for our date.
 SET @intISOWeekdayNumber = (((DATEPART(dw, @dtDate) - 1) + (@@DATEFIRST - 1)) % 7) + 1

 -- Get the date of the Thursday in this ISO week.
 SET @dtThisThursday = DATEADD(d,(4 - @intISOWeekdayNumber),@dtDate)

 -- Get the date of the 1st January for 'this Thursdays' year.
 SET @dtFirstOfThisThursdaysYear = CAST(CAST(YEAR(@dtThisThursday) AS CHAR(4)) + '-01-01' AS DATETIME)

 SET @intISOWeekdayNumberOfFirstOfThisThursdaysYear = (((DATEPART(dw, @dtFirstOfThisThursdaysYear) - 1) + (@@DATEFIRST - 1)) % 7) + 1

 -- Get the date of the first Thursday in 'this Thursdays' year.
 -- The year of which the ISO week is a part is the year of this date. 
 IF (@intISOWeekdayNumberOfFirstOfThisThursdaysYear in (1,2,3,4))
 SET @dtFirstThursdayOfYear = DATEADD(d,(4 - @intISOWeekdayNumberOfFirstOfThisThursdaysYear),@dtFirstOfThisThursdaysYear)
 ELSE
 SET @dtFirstThursdayOfYear = DATEADD(d,(4 - @intISOWeekdayNumberOfFirstOfThisThursdaysYear + 7),@dtFirstOfThisThursdaysYear)

 -- Work out how many weeks from the first Thursday to this Thursday.
 SET @intISOWeekNumber = DATEDIFF(d,@dtFirstThursdayOfYear,@dtThisThursday)/7+1

 RETURN @intISOWeekNumber

END
GO
Взято отсюда
http://www.rmjcs.com...07/Default.aspx

Также можете посмотреть первый пример (
Example A) по теме "CREATE FUNCTION" в BOL. Там тоже в качестве примера рассматривается подобная функция:
http://technet.microsoft.com/ru-ru/library/ms186755(SQL.90).aspx

Alt 01.02.2010, 12:45   #4  
Lates ist offline
Lates
Участник
 
207 / 10 (1) +
Registriert seit: 08.02.2007
Большое спасибо!
Пока решили отнимать единицу для 2010 года.
Дальше посмотрим.
 


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:06 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.