Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select Datepart mit Sortierung (https://www.delphipraxis.net/69910-select-datepart-mit-sortierung.html)

renekr 22. Mai 2006 11:51

Datenbank: SQL Server 2005 • Version: 2005 STD • Zugriff über: ADO

Select Datepart mit Sortierung
 
Hi,
hab folgendes Thema:

Mache einen Select mit

SQL-Code:
SELECT    TOP (100) PERCENT CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)) AS Jahr_KW,
                      COUNT(Kennummer) AS Einträge, SUM(Prod_min) AS Prod, SUM(PM_min) AS PM, SUM(Prod_min + PM_min) AS PROD_PM, MAX(Prod_min + PM_min)
                      AS Prod_PM_MAX_KW
FROM        dbo.Aktionsdaten
GROUP BY CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit))
ORDER BY Jahr_KW
Ergebniss:(nur Ausschnitt )
2002 19 40 1300 1365 2665 330
2002 2 25 1030 1605 2635 720
2002 20 76 1981 3256 5237 480
...
2002 39 55 1842 2800 4642 620
2002 4 50 2399 2810 5209 600
2002 40 36 4412 1747 6159 4200


Nun ist das Problem das die Jahr KW nicht stimmen vom Ablauf her.
Normal muss die KW. 2 ganz oben kommen.

Hat jemand eine Idee?
Danke.

marabu 22. Mai 2006 11:59

Re: Select Datepart mit Sortierung
 
Hallo René,

entweder du verbaust die KW zweistellig mit evtl. führender Null oder du sortierst nach Jahr und KW getrennt und numerisch.

Grüße vom marabu

renekr 22. Mai 2006 19:42

Re: Select Datepart mit Sortierung
 
Hi,
also:

Wenn ich es mit der Führenden 0 mache wie muss ich es dann machen das ich im SQL String bfragen kann ob 1 oder 2 Stellig und jenachdem dann eine0davor?

Oder

Das Jahr mit Convert bekomme ich als Char zurück wie kann ich es als Zahl zurückbekommen?

Danke.

marabu 22. Mai 2006 20:04

Re: Select Datepart mit Sortierung
 
Zum einen liefert dir DatePart() einen Integer-Wert. Erst durch Convert() erzeugst du daraus einen String. Zum anderen kannst du einen String KW mit führenden Nullen ausstatten indem du ihm die gewünschte Zahl an Nullen voranstellst und dann die gewünschte Länge am Ende wieder wegnimmst:

SQL-Code:
Right('00' + KW, 2)
marabu

renekr 23. Mai 2006 00:34

Re: Select Datepart mit Sortierung
 
Hi marabu,
Also ich glaub isteh grad kräftig auf der Leitung .
Hab es nun so gemacht.

SQL-Code:
SELECT    TOP (100) PERCENT CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)) AS Jahr_KW,
                      RIGHT('00' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) AS KW
FROM        dbo.Aktionsdaten
ORDER BY Jahr_KW
Result:

2002 1 # 1
2002 10 # 10


I blick grad net mehr durch.

danke

jensw_2000 23. Mai 2006 01:33

Re: Select Datepart mit Sortierung
 
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:
SQL-Code:
 2004 01
Scheint also zu funktionieren.

Dein Fehler ist, das
SQL-Code:
CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2)
auch bei einstelligen Tagen 2 Zeichen lang ist. Somit ergibt
SQL-Code:
RIGHT ( '00' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) )
immer
SQL-Code:
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
:hi:

renekr 24. Mai 2006 08:57

Re: Select Datepart mit Sortierung
 
Hi Jens,
Wow bin platt.

Vielen Dank.
Da muss i wohl noch einiges Lernen in bezug auf SQL.

Werd es sofort mal testen und die UDF auch natürlich,das ist echt eine riesen Erleichterung.
Vielen Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz