Hej I MySQL skulle något sånt här funka; I MS SQL: Det här är ett "trubbigt" sätt att lista ut månaden, då vissa veckor spänner över två månader. Ni ska ha stort tack. Hämta månad från år och vecka
Finns det något sätt att hämta månad med hjälp av år och vecka?
Jag har nämligen år "2011" och vecka "8" lagrat i databasen och vill slippa en uppslagstabell.
Tack
/bullenSv: Hämta månad från år och vecka
SELECT ADDDATE(CONCAT(2011, '-01-01'), INTERVAL 8 WEEK)
Sv: Hämta månad från år och vecka
CREATE FUNCTION udf_WeekToMonth( @IsoWeekNum INT, @YearNum INT ) RETURNS INT
AS
BEGIN
DECLARE @FirstMonday DATETIME
, @JanFourth DATETIME;
SELECT @JanFourth = CAST(@YearNum AS CHAR(4)) + '-01-04' -- hitta rätt vecka 1 enl. ISO 8601
SELECT @FirstMonday = DATEADD(d, 1-DATEPART(dw,@JanFourth), @JanFourth)
RETURN DATEPART(M, DATEADD(WW, @IsoWeekNum-1, @FirstMonday))
END
GO
SET DATEFIRST 1 -- Veckor börjar på måndag och inte nåt annat skumt
SELECT dbo.udf_WeekToMonth(8,2011)
-- eller
SELECT DATEPART(M, DATEADD(WW, 8-1, DATEADD(d, 1-DATEPART(dw,CAST(2011 AS CHAR(4)) + '-01-04'), CAST(2011 AS CHAR(4)) + '-01-04')))
Årets första dag tillhör ju inte nödvändigtvis vecka 1.
Sv: Hämta månad från år och vecka
Men det har du väl tagit med i beräkningen antar jag.
Personligen så tycker jag att om ska man hålla på med datum/tid i något format ska dom lagras i datatyperna datetime, date eller time.
Då har man allt man behöver, och slipper "krystade" manipulationer av data (som dessutom är felbenägna).
Finns alla sorters datumfunktioner för att sedan ta reda på vad man vill.
Men här är Karlstadsjuryns röstning. :-)
PS. Om du lagrar året som en integer måste du CASTa den till en varchar(4). DS.
<code>
MONTH(DATEADD(WEEK, 8, [din årskolumn]))
</code>Sv: Hämta månad från år och vecka
Jag har nu gjort om tillämpning så att vi lagrar ett datum och att vi använder det istället. Det kommer vara mer användbart i alla sammanhang.
Tack för funktionen den kommer till användning för tidigare data. Det ställer som sagt till det när en vecka går över månad. Men det kan man kontrollera hyggligt.
Tack för hjälp