---
title: "hämtar fel vecka i sqlserver 2000"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/119821-hämtar-fel-vecka-i-sqlserver-2000"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "doggelito"
published: "2005-01-11T12:11:46.000Z"
updated: "2005-01-11T15:41:34.000Z"
replies: 4
views: 421
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/119821-hämtar-fel-vecka-i-sqlserver-2000"
---

# hämtar fel vecka i sqlserver 2000

## #1 — doggelito, 2005-01-11T12:11Z

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?

Permalänk: https://www.webforum.nu/p/119821

## #2 — pebi, 2005-01-11T12:36Z

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

Permalänk: https://www.webforum.nu/p/1525249

## #3 — doggelito, 2005-01-11T12:56Z

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

Permalänk: https://www.webforum.nu/p/1525263

## #4 — toha, 2005-01-11T15:35Z

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>

Permalänk: https://www.webforum.nu/p/1525362

## #5 — doggelito, 2005-01-11T15:41Z

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

Permalänk: https://www.webforum.nu/p/1525366

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/119821-hämtar-fel-vecka-i-sqlserver-2000
