Avatar billede rsd Nybegynder
23. februar 2005 - 09:09 Der er 4 kommentarer

Forkert Ugenr i MS SQL

Jeg har et problem med ugenummeret når jeg i 2005 trækker ugenummeret ud af en dato. Både funktionen Week og Datepart giver mig et forkert ugenr (uge 9 i stedet for uge 8). Når jeg arbejder i VB kan jeg i datepart funktionen angive hvordan ugerne falder, men det syntes jeg ikke jeg kan i MS-SQL.
Avatar billede cwboy Nybegynder
23. februar 2005 - 09:19 #1
Det ser ud til at Datepart altid går ud fra at 1. Januar er uge 1, hvilket jo er forkert i Europæisk øjemed. Her er et uddrag fra SQL Server Books online under Datepart:

"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."

Det lader desværre til, at du bliver nødt til at efterbehandle ugenummeret i din applikation.
Avatar billede ldanielsen Nybegynder
23. februar 2005 - 13:38 #2
Til din oplysning er uge 1 den første uge hvor torsdag er i januar
Avatar billede venne Nybegynder
25. februar 2005 - 09:45 #3
SQL Server har sin egen opfattelse af ugenumre som ganske rigtigt ikke passer os ret godt. I Books Online under CREATE FUNCTION (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create_7r1l.asp) er der et eksempel på en funktion der beregner korrekt ugenummer.

Jeg har lige prøvet det af og resultatet ser fornuftigt ud:

-----
DECLARE @dato datetime
DECLARE @res TABLE(dato datetime, ugedag int, fra_datepart int, fra_isoweek int)

SET DATEFIRST 1

SET @dato = '20041227'
WHILE @dato < '20050107'
BEGIN
  INSERT INTO @res VALUES(@dato, DATEPART(dw, @dato), DATEPART(week, @dato), dbo.ISOweek(@dato))
  SET @dato = DATEADD(d, 1, @dato)
END

SELECT * FROM @res
-----

Resultat:
dato                        ugedag      fra_datepart fra_isoweek
---------------------------- ----------- ------------ -----------
2004-12-27 00:00:00.000      1          53          53
2004-12-28 00:00:00.000      2          53          53
2004-12-29 00:00:00.000      3          53          53
2004-12-30 00:00:00.000      4          53          53
2004-12-31 00:00:00.000      5          53          53
2005-01-01 00:00:00.000      6          1            53
2005-01-02 00:00:00.000      7          1            53
2005-01-03 00:00:00.000      1          2            1
2005-01-04 00:00:00.000      2          2            1
2005-01-05 00:00:00.000      3          2            1
2005-01-06 00:00:00.000      4          2            1
Avatar billede nielslbeck Nybegynder
04. oktober 2006 - 13:21 #4
vennes kommentar var et korrekt svar - så hvis venne giver et svar, synes jeg rsd skal afgive points og få spørgsmålet lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester