J'ai créé une fonction dans SQL pour renvoyer la date appropriée d'une semaine ISO à partir d'un format comme "15W53". Où la première partie avant le "W" est le numéro de l'année et la seconde moitié est le numéro de la semaine. La date renvoyée doit renvoyer le début de la semaine pour cette date. Par exemple, 15W53 devrait renvoyer 12-28-2015 et 16W01 devrait retourner 01-04-2016. Cependant si je cours ceci pour les exemples suivants j'obtiens, d'après ce que j'ai lu au sujet de la semaine d'OIN, des résultats incorrects. Ai-je créé la fonction de manière incorrecte pour analyser la date?Récupérer la date de la semaine ISO dans SQL
SET DATEFIRST 1;
SELECT dbo.[GetDateFromISOweek]('15W52') AS Correct, '15W52' -- Returns: 2015-12-21
SELECT dbo.[GetDateFromISOweek]('15W53') AS Correct, '15W53' -- Returns: 2015-12-28
SELECT dbo.[GetDateFromISOweek]('16W01') AS Incorrect, '16W01'-- Returns: 2015-12-28
SELECT dbo.[GetDateFromISOweek]('16W02') AS Incorrect, '16W02'-- Returns: 2016-01-04
SELECT dbo.[GetDateFromISOweek]('16W03') AS Incorrect, '16W03'-- Returns: 2016-01-11
Fonction:
CREATE FUNCTION [dbo].[GetDateFromISOweek] (@Input VARCHAR(10))
RETURNS DATETIME
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @YearNum CHAR(4)
DECLARE @WeekNum VARCHAR(2)
SET @YearNum = SUBSTRING(@Input,0,CHARINDEX('W',@Input,0))
SET @WeekNum = SUBSTRING(@Input,CHARINDEX('W',@Input,0)+1,LEN(@Input))
RETURN(DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @YearNum) + (@WeekNum-1), 7));
END;
Ma recommandation serait Chaque fois que vous avez besoin d'écrire une fonction pour calculer une date, vous devriez probablement envisager de créer une table de dimension de date. Cela rendra votre vie 1000% plus facile. https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/ – Shawn
Hey Shawn, c'est une super idée! Merci pour le lien! – InvaderZim