Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: Select Datepart mit Sortierung

  Alt 23. Mai 2006, 01:33
Hi,
ich habe es eben mal so versucht ...

SQL-Code:

SELECT TOP 100 PERCENT
    CAST( DATEPART(yyyy, Stoer_Zeit) AS CHAR(4) )
    + ' ' +
    RIGHT('00' + CAST( DATEPART( WEEK, Stoer_Zeit ) AS VARCHAR(2) ) ,2)
    AS Jahr_KW
FROM dbo.Aktionsdaten

ORDER BY
    CAST( DATEPART(yyyy, Stoer_Zeit) AS CHAR(4) )
    + ' ' +
    RIGHT('00' + CAST( DATEPART( WEEK, Stoer_Zeit ) AS VARCHAR(2) ) ,2)
Test:

SQL-Code:
DECLATE @D DATETIME
SET @D = CAST('1.1.2004AS DATETIME)

SELECT CAST( DATEPART( YEAR, @D ) AS CHAR(4) )
       + ' ' +
       RIGHT('00'+CAST (DATEPART (WEEK,@D) AS VARCHAR(2) ) ,2)
Ausgabe: 2004 01 Scheint also zu funktionieren.

Dein Fehler ist, das CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) auch bei einstelligen Tagen 2 Zeichen lang ist. Somit ergibt RIGHT ( '00' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) ) immer CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) Bei Einstelligen Tagen wäre das Ergebins also "2003 2 ".


Schreibe dir am besten eine kleine UDF, damit die Abfragen nicht unübersichtlich werden.

SQL-Code:
CREATE FUNCTION GetYearKw (
  @Date DATETIME
)
RETURNS VARCHAR(7)
AS
BEGIN
  -- Gibt das Jahr und die KW von @Date im Format "2004 15" zurück
  DECLARE @Res VARCHAR(7)

  SELECT @Res =
       CAST( DATEPART( YEAR, @Date ) AS CHAR(4) )
       + ' ' +
       RIGHT('00'+CAST (DATEPART (WEEK,@Date) AS VARCHAR(2) ) ,2)
  
  RETURN @Res

END
Aufruf:

SQL-Code:
SELECT TOP 100 PERCENT
    dbo.GetYearKw(Stoer_Zeit) AS Jahr_KW

FROM dbo.Aktionsdaten

ORDER BY
     dbo.GetYearKw(Stoer_Zeit)
Schöne Grüße,
Jens
  Mit Zitat antworten Zitat