webForumDet fria alternativet

hämtar fel vecka i sqlserver 2000

4 svar · 415 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

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?

pebiMedlem sedan jan. 2005327 inlägg
#2

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

doggelitoMedlem sedan juni 20003 076 inlägg
#3

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

tohaMedlem sedan dec. 1999707 inlägg
#4

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

doggelitoMedlem sedan juni 20003 076 inlägg
#5

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!)

132 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)