Sök på tekniken.nu

Om tekniken.nu

På tekniken.nu bloggar Iteams konsulter om det som ligger dem varmast om hjärtat - teknik.
www.iteam.se

Prenumerera på tekniken.nu

Bloggportalen.se
Bloggtoppen.se
Top Datorer bloggar
Web Analytics

Clicky

En självklarhet!
Teknikbloggen logotype

Fallgropar med veckonummer

2010-05-17 10:49 - Utvecklingstips av Christian Landgren
Christian Landgren
Christian Landgren
Systemutvecklare
Iteam

På grund av total förvirring kring veckonummer i världen kan jag tipsa om att SQL kan enkelt leverera rätt veckonummer enligt ISO standard (som självklart Sverige redan använder).

Syntaxen är:

DATEPART(iso_week, GETDATE())

Dvs, använd aldrig WEEK(getdate())  - även om det kanske funkar just nu så kan det bara vara en olyckligt sammanträffande och ett annat år så slutar ditt system att fungera efter nyår.

Läs mer om veckor på Wikipedia:

http://sv.wikipedia.org/wiki/Vecka

ISO-standarden säger att en vecka alltid måste börja på en måndag (vilket på något sätt är rimligast) och för att det ska räknas som en vecka måste den ha minst fyra dagar, dvs den första veckan på året blir den första veckan som har sin torsdag på det nya året! Enkelt och självklart.  Däremot blir det lite märkligt när nyårsafton infaller just på en torsdag för då går den första veckan av det nya året under numret 53 på föregående år, det är en nödvändig konsekvens av ISO standarden men det betyder alltså att man måste tänka på följande:

  1. Utgå inte från att veckans år alltid är nuvarande år (du kan alltså inte räkna med att köra WHERE week= DATEPART(ISO_WEEK, getdate()) AND year=year(getdate())
  2. Räkna inte med att det bara är 52 veckor på ett år
  3. Testa! (det är svårt att få sitt huvud runt detta och pröva genom att ställa fram klockan några år)

Detta året ger till exempel SQL Servern följande veckonummer för i fredags:

När det korrekta värdet egentligen är:

Jag personligen skulle vara glad om SQL Server var konfigurerad till att alltid ange ISO standarder på alla värden men det kanske går att ställa in?

... och du vet väl att Iteam just nu söker duktiga medarbetare? Läs mer på iteam.se

Andra bloggar om:
Inga kommentarer

Kommentera

Namn

Email

URL

Kommentar

Skriv vad som står i bilden till höger