Je sais que ce poste est une façon super vieux, mais je voulais faire quelque chose de semblable et est venu avec une autre solution et figurés Je posterais pour la postérité. De plus j'ai fait quelques recherches et n'ai pas trouvé beaucoup de contenu sur cette question.
Dans mon cas, j'essayais d'utiliser une colonne calculée PERSISTED, ce qui nécessite que le calcul soit déterministe. Le calcul j'est:
datediff(dd,'2010-01-03',[DateColumn]) % 7 + 1
L'idée est de trouver un dimanche connu que vous savez avoir lieu avant toute date possible dans votre table (dans ce cas 3 Jan 2010), puis calculer le modulo 7 + 1 du nombre de jours depuis ce dimanche.
Le problème est que l'inclusion d'une date littérale dans l'appel de la fonction est suffisante pour la marquer comme non déterministe. Vous pouvez contourner cela en utilisant l'entier 0 pour représenter l'époque, qui pour SQL Server est le 1er janvier 1900, un dimanche.
datediff(dd,0,[DateColumn]) % 7 + 1
Le +1 est tout simplement le résultat fonctionnent comme datepart (dw, [datecolumn]) lorsque datefirst est réglé sur 7 (par défaut aux USA), qui fixe dimanche à 1, lundi à 2, etc
Je peux aussi l'utiliser en conjonction avec case [thatComputedColumn] quand 1 puis 'dimanche' quand 2 puis 'lundi' ... etc. Wordier, mais déterministe, ce qui était une exigence dans mes environs.
S'il vous plaît montrer une partie de votre code, et comment vous avez l'intention de l'utiliser. –