Je veux avoir une fonction qui calcule l'exercice financier. L'exercice doit commencer le premier lundi de mars. Merci!
Exemple: mais ça ne fonctionne pas p> p>
3 Réponses :
Il semble qu'il existe un certain nombre d'erreurs de syntaxe avec votre script. Essayez cela à la place. J'ai supprimé les ensembles et j'ai renvoyé au point de si les déclarations de Si elles sont supprimées. Aussi, notez le regroupement des déclarations de Si.
CREATE FUNCTION dbo.fnc_FiscalYear( @AsOf DATETIME ) RETURNS INT AS BEGIN DECLARE @Answer INT IF (( MONTH(@AsOf) < 3 ) OR (MONTH(@AsOf) = 3 AND DATENAME(weekday, @AsOf) = 'Monday' AND datepart(day, @AsOf) >= 1 AND datepart(day, @AsOf)<=7)) RETURN (YEAR(@AsOf) - 1) RETURN YEAR(@AsOf) END GO
Pour 2019-03-04, la fonction renvoie 2018. Pour 2019-03-02 et 2019-03-04, il renvoie 2019. Cela n'a pas l'air juste.
La logique pour cela est délicate - surtout pour la première semaine de mars:
modifier l'expression à testez la fonction avec des données d'échantillon: p> (@@ datefirst + datePart (jour de semaine, échantillon) - 1)% 7 + 1 code> retournera toujours un entier de
0 code> à
6 code > Avec
0 code> correspondant au dimanche quel que soit le paramètre de
datefirst code> ou
langue code> et sans manipulation de chaîne.
(@@ datefirst + datePart (semaine, échantillon) - 2)% 7 code> déplace le début du cycle du dimanche au lundi et la plage à
0 code> à
6 code > Ce qui, à son tour, simplifie le code suivant: p>
Que voulez-vous dire, "ne travaille pas"?
Bienvenue à la pile, comme l'a indiqué Sergio, il est important d'être spécifique sur ce que «ne fonctionne pas». Merci de bien vouloir indiquer autant d'informations que possible.