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.2004' AS 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