2013-04-11 2 views
0

그래서 프로그래밍이 오래 끝났으며 논리적 장애물이 하나 남았습니다. 내 신청서는 견적 요청에 KPI를 제공합니다. 비즈니스 담당자는 이러한 KPI를 일주일별로 나누어달라고 요청했으며, 완료되면 요청이 월별로 중단 될 것이라고 상상합니다. 나는 내 SQL 쿼리에서 이것을 알아 냈다 :
SELECT qpid FROM cpkpis WHERE DATEPART(ww, qpvalidfrom)=13 GROUP BY qpid;
다음은 드릴 다운을위한 실제 기본 키를 제공하고 실제 기본 키를 제공하는 qpids 목록을 제공합니다.
나는 내 머리를 얻을 수 없다는 것은 내 C# 코드의 주 양식 열거를 얻는 방법이다. 나는 GregorianCalandar Class과 특히 GetWeekOfYear Method을 보았습니다. 그러나 그 값들을 열거하는 데 어려움을 겪고 있습니다.C#과 SQL 사이의 주간 변환

내 질문은 다음과 같습니다. 지정된 날짜 범위 [2013-01-14에서 2013-04-10까지] 일주일의 열거 수를 시작일과 종료일 사이에 ints으로 어떻게 얻을 수 있습니까?

답변

0

를, 반복자는 아마 가장 간단한 방법입니다 SQL에서. 설정이 다른 경우 올바른 값을 지정해야합니다.

당신이 뭔가를 사용할 수있는 T-SQL에서
+0

잘 했어, 루프를 위해 내가 수면 부족'INT startWeek = GregorianCalandar.GetWeekOfYear 때문에 붙어 것보다 훨씬 더 (startDate' 'CalendarWeekRule.FirstFullWeek' ', DayOfWeek.Monday)' 'INT endWeek = GregorianCalandar.GetWeekOfYear (startDate' 'CalendarWeekRule.FirstFullWeek' 'DayOfWeek.Monday)'' 대 (INT I = startWeek; I <= endWeek; 내가 ++) { ' ''' // 엉터리 비즈니스 로직 및 SQL 주입이 자주 발생하는 데이터베이스 호출 ' '}' – user2263083

3

예상되는이 작업 및 다른 요구 사항을 돕기 위해 date table이 필요합니다. IMHO 데이터베이스에서 가장 어려운 일은 존재하지 않는 데이터를 쿼리하는 것입니다.

날짜는 테이블을 조회 할 수 있습니다 다음 weekRulefirstDayOfWeek 매개 변수에 대한

public static IEnumerable<int> WeekNumbersBetween(
    DateTime startDate, 
    DateTime endDate, 
    Calendar calendar = null, 
    CalendarWeekRule weekRule = CalendarWeekRule.FirstDay, 
    DayOfWeek firstDayOfWeek = DayOfWeek.Sunday) 
{ 
    if (calendar == null) 
    { 
     calendar = new GregorianCalendar(); 
    } 

    DateTime week = startDate; 
    while (week <= endDate) 
    { 
     yield return calendar.GetWeekOfYear(week, weekRule, firstDayOfWeek); 
     week = week.AddDays(7); 
    } 
} 

기본 값은 기본 설정과 일치해야합니다 : C#을에서

Select Distinct DatePart(ww, dateField) as WeekNo 
from DateTable 
where dateField between '2013-01-14' and '2013-04-10'; 
+0

는 동의하지만 다음 날부터 일주일 달 모두에 대한 – JAGAnalyst

+0

감사를 도출 할 수 있도록 내가 일까지 곡물있는 테이블을 만들 것 대답과 나는 대단히 데이트 테이블 기사에 대한 링크를 주셔서 감사합니다. – user2263083

0

:

DECLARE @StartDate DATE = '2013-01-14'; 
DECLARE @EndDate DATE = '2013-04-10'; 

WITH weekcte AS 
    (SELECT DATEADD(dd, -1, DATEADD(wk, DATEDIFF(wk, 0, @StartDate), 0)) AS DateValue 
     UNION ALL  
     SELECT DATEADD(wk, 1, DateValue) 
     FROM weekcte 
     WHERE DATEADD(wk, 1, DateValue) <= @EndDate) 
SELECT DATEPART(ww, w.DateValue) AS 'Week No' 
    FROM weekcte AS w;