denna kod hämtar vecka 3, varför då? det ska ju bli v. 2!
set datefirst 1
select datepart(ww, '2005-01-13')
vad har jag missat?
4 svar · 415 visningar · startad av doggelito
denna kod hämtar vecka 3, varför då? det ska ju bli v. 2!
set datefirst 1
select datepart(ww, '2005-01-13')
vad har jag missat?
Konstiga amrikaner
Lite märkligt är det.
Nedan är ett utfrag ur SQL-server hjälp.
Där ser det ju ut som om svaret du får är det kan förvänta sig. (1/1 var ju en lördag iår) Så det verkar inte som datepart week använder "veckonummer", en vecka måste ha minst 4 dagar om jag minns rätt.
Så om det inte finns någon annan fiffig och enkel lösning så kolla veckdag för 1/1 för aktellt år, och skapa en ofset utifrån det.
Då borde koden bli generell och funka för alla år
Men det borde finnas färdigt.
/pebi
The week (wk, ww) datepart reflects changes made to SET DATEFIRST. January 1 of any year defines the starting number for the week datepart, for example: DATEPART(wk, 'Jan 1, xxxx') = 1, where xxxx is any year
jag säger bara: satan i gatan! x(
efter lite läsning på news:en så visar det sig att sql:en inte klarar av själv att hantera veckor på ett korrekt sätt!
herregud, vilket öde! :x
löning på problemet: en ud-function:
CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
SET @ISOweek= DATEPART(wk,@DATE)+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
bara att börja gå igenom alla databaser då som använder vecko-funktioner! :x
Japp, jag hade samma problem förra veckan. Slutade med att jag gjorde en ful lösning. Skickade in datum fick ut år + vecka. Fick inte ovanstående funktion att fungera för alla datum.
http://www.webforum.nu/showthread.php?s=&threadid=116656&forumid=208
toha skrev:
Fick inte ovanstående funktion att fungera för alla datum.
när funkade det inte?
i exemplet du hade stod det: set firstdate 1, men det heter tvärsom: set datefirst 1, var det därför det inte funka?
mitt exempel på funktionen kommer från microsoft books online, så den bör väl funka! (alltid, får man hoppas!)