-2
votes

Année fiscale SQL Server

Je veux avoir une fonction qui calcule l'exercice financier. L'exercice doit commencer le premier lundi de mars. Merci! Exemple: xxx

mais ça ne fonctionne pas


2 commentaires

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.


3 Réponses :


0
votes

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


1 commentaires

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.



0
votes

La logique pour cela est délicate - surtout pour la première semaine de mars: xxx


0 commentaires

0
votes

(@@ datefirst + datePart (jour de semaine, échantillon) - 1)% 7 + 1 retournera toujours un entier de 0 à 6 Avec 0 correspondant au dimanche quel que soit le paramètre de datefirst ou langue et sans manipulation de chaîne.

modifier l'expression à (@@ datefirst + datePart (semaine, échantillon) - 2)% 7 déplace le début du cycle du dimanche au lundi et la plage à 0 à 6 Ce qui, à son tour, simplifie le code suivant: xxx

testez la fonction avec des données d'échantillon: xxx


0 commentaires