2015-11-05 1 views
1

J'essaie de convertir une date de début et de fin en plusieurs lignes remplies avec des numéros de semaine et l'année qui s'y connecte. Mon idée est de convertir cette date de début et de fin dans SSIS avec un composant Script et de créer des lignes pour chaque semaine en définissant SynchronousInput sur 'None'. J'ai essayé d'utiliser un Timespan mais cela ne compte pas jusqu'à l'année suivante quand j'atteins la semaine 53.Conversion d'un PeriodStart et PeriodEnd en année + numéro de semaine

Est-ce que quelqu'un sait comment accomplir ceci?

Exemple:

Entrée:

StartDate EndDate 
2014-12-29 2015-02-01 

sortie Recherché:

Year WeekNr 
    2015  1 
    2015  2 
    2015  3 
    2015  4 
    2015  5 
+0

Il y a 21 jours entre 5 et 26. Comment obtenez-vous 5 semaines? Est-ce que les semaines complètes commencent le lundi ou StartDate? –

+0

l'a corrigé mais le point est de prendre le numéro de semaine de la date (le 26 janvier est dans la semaine 5) – Alim

+0

2015-01-05 ne sera jamais la semaine 1, pas au format ISO, pas au format US. Peut-être que vous devriez décrire exactement comment convertir à votre sortie désirée –

Répondre

1

Au début, je l'formular de here, mais de rappeler que, il y a une meilleure façon en utilisant sqlserver 2008+ et modifié le script pour qu'il soit plus lisible:

;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)), 
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f) 
SELECT 
    datepart(iso_week, dateadd(week, n-1, @from)) weeknr, 
    datepart(year, dateadd(week, datediff(day, -7*n, @from)/7, -4)) Year 
FROM TALLY 
WHERE 
    datediff(ww, dateadd(d, -1, @from), dateadd(d, -1, @to))+1 >= n 

Résultat:

weeknr Year 
1  2015 
2  2015 
3  2015 
4  2015 
5  2015 
+0

Cela a fait l'affaire pour moi thx! – Alim