J'utilise la formule de Steve Kass pour obtenir le nième jour d'une semaine à la nième semaine du mois précédent pour une date donnée. Cela fonctionne très bien - mais je ne comprends vraiment pas ce que fait l'opérande du module dans la formule. Quelqu'un peut-il expliquer? Ive a essayé de fournir quelques faits connus ci-dessous:Explication du module pour la formule de Steve Kass de trouver le nième jour de la semaine à la neuvième semaine du mois
declare @svcDate as datetime= '1/6/2017', @myN as tinyint=4, @myD as tinyint=1
declare @ret datetime;
declare @first datetime -- First of the month of interest (no time part)
declare @nth tinyint -- Which of them - 1st, 2nd, etc.
declare @dow tinyint -- Day of week we want - this server is set to - 1 sun, 2 mon, 3 tue, 4 wed, 5 thur, 6 fri, 7 sat
set @first = dateadd(month,-1,datefromparts(year(@svcDate), month(@svcDate), 1)) --first of last month
set @nth = @myN
set @dow = @myD
--Select @first 12/1/2016
set @ret = @first + 7*(@nth-1)
--select @ret 12/22/2016 Thurs
--datepart(weekday,@ret)=5
set @ret= @ret + (7 + @dow - datepart(weekday,@ret))%7
if(@ret IS NULL)
set @ret='1/1/2017';
select @ret
select 3%7 --returns 3
select convert(decimal(18,2),3)/convert(decimal(18,2),7) -- returns 0.42857142857142857142
Vous avez oublié de répondre à la question: qu'est-ce que ça fait ** dans la formule **. Est-ce nécessaire? –
@PM: "ce que [l'opérateur de module] fait ** dans la formule **" est la même chose que l'opérateur de module fait partout ...il renvoie le reste d'une opération de division entière. La question à laquelle j'ai omis de répondre était une question qui n'a pas été posée ... ** "Pourquoi une opération de module est-elle nécessaire dans la formule" **. Je suppose que c'est dans la formule parce que la soustraction de '@ dow' et de' 'jour de semaine' est potentiellement négative. En ajoutant 7, puis en faisant fonctionner le module pour éliminer les semaines complètes, la formule renvoie un nombre de jours compris entre 0 et 6. – spencer7593
Merci beaucoup, Spencer7593. Cela a du sens pour moi sur la sténographie et j'apprécie vraiment votre réponse très détaillée. A réussi à obtenir les petites cellules grises autour du concept. – user1795131