Avatar billede doto Nybegynder
03. november 2009 - 09:11 Der er 9 kommentarer og
1 løsning

VB/T-SQL

Jeg har en funktion i VB, som jeg skal lave om til en T-SQL funktion og har gjort følgende, som desværre ikke virker. Nogen der kan se hvad jeg gør forkert?

VB:

Function Uge(Dato)

    Uge = DatePart("ww", Dato, vbMonday, vbFirstFourDays)
    If (Uge > 52) Then
      If (DatePart("ww", DateAdd("d", 7, Dato), vbMonday, vbFirstFourDays) = 2) Then
      Uge = 1
      End If
    End If

T-SQL:

ALTER FUNCTION [dbo].[ISOweek] (@DATO datetime)
RETURNS int
AS
BEGIN

    DECLARE @ISOweek int
    DECLARE @WEEK int
    DECLARE @WeekHlp int

    SET @ISOWeek = dbo.IsoWeek(@DATO) 
    SET @WEEK = DATEPART (wk,@ DATO)
    SET @WeekHlp = DATEPART (wk,DATEADD(d,7,@ DATO))

    IF @ISOweek > 52
        IF @WeekHlp = 2
            SET @ISOweek = 1
    RETURN(@ISOweek)
END


End Function
Avatar billede Syska Mester
03. november 2009 - 12:37 #1
Udover forkert copy/paste ( din End Function, som nok hører til din VB function ), så ser det ud til at du laver loop, da du i din SQL kalder IsoWeek(@DATO) igen og igen ... og det sker jo i en uendelig loop ... så nok derfor det ik' virker ...

mvh
Avatar billede doto Nybegynder
03. november 2009 - 13:23 #2
Ja det er rigtigt. End function hører under VB. Sorry!
Men hvad skal der stå i stedet for IsoWeek(@Dato) så jeg ikke laver et loop?
Avatar billede Syska Mester
03. november 2009 - 13:43 #3
I dont know ... lige pt kalder du jo funktionen selv i et uendeligt loop

IsoWeek -> IsoWeek -> IsoWeek, og til sidst må du jo få en Exception af en slags.

Men hvad skulle den funktion da returnere ? Kan selvf godt ske at der er noget jeg har overset ...

// ouT
Avatar billede doto Nybegynder
03. november 2009 - 13:55 #4
Jeg vil prøve at rette op på Mícrosoft's fejl, som ikke håndterer en dansk måde at se på hvilken ugedag en uge starter med og hvordan uge 53 håndteres.

Hvis jeg taster 06-01-2010 ind, vil jeg gerne have returneret år 2010, uge 01 og dag 03 og ikke som nu år 2010, uge 02 og dag 04.
Avatar billede janus_007 Nybegynder
04. november 2009 - 00:11 #5
Hvilken sql server version kører du?
Avatar billede doto Nybegynder
04. november 2009 - 07:32 #6
Hej Janus,

Jeg kører SQL Server 2005.

Jeg har forresten hørt at der findes en indbygget funktion i SQL Server 2008... og har fra et andet forum, social.msdn.microsoft fået denne streng: SELECT DATEPART(isoww, GETDATE())

Hvordan får jeg puttet denne streng ind i min?
Avatar billede janus_007 Nybegynder
04. november 2009 - 10:44 #7
Ja det kan 2008 :)

Men ellers så brug denne her fra MSDN:
CREATE FUNCTION dbo.ISOweek (@DATE datetime)
RETURNS int
WITH EXECUTE AS CALLER
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;
GO
SET DATEFIRST 1;
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week';


Og husk at justere denne : SET DATEFIRST 1; alt afhængig af hvilken dag du vil have dagen skal starte på :)


( http://msdn.microsoft.com/en-us/library/ms186755(SQL.90).aspx )
Avatar billede doto Nybegynder
04. november 2009 - 11:03 #8
Tak indtil videre. Jeg tester og vender tilbage.
Avatar billede doto Nybegynder
18. november 2009 - 10:30 #9
Hej Janus,

Nu har min kollega og jeg arbejdet meget ihærdigt med den funktion som du foreslog. Den virker, på den måde at den godt kan køre - MEN - når jeg kører funktionen i View returnerer den stadig den forkerte uge som før. 01-02-2010 giver uge 52 og ikke uge 53 og 01-06-2010 giver uge 2 - den springer altså stadig uge 1 over. Jeg har forsøgt at skrive set language 'Danish', men det ændrer intet.

Er der nogen der har et forslag til hvad der er galt?
Avatar billede doto Nybegynder
24. november 2009 - 09:10 #10
Jeg har endnu ikke fået løst problemet og lukker spørgsmålet.
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