![]() |
Datenbank: SQL Server • Version: 2005 STD • Zugriff über: ADO
SQL Abfrage über Kalender Wochen
Hallo,
Ich bin gerade dabei eine Ausweretung über eine Tabelle zu machen . Dabei möchte ich folgendes tun. In der Tabelle gits ein Datetime Feld . Ich möchte aber die Zeiten anhand der KW abfragen. Also nicht von bis sondern nur zb. KW20 /2005 eingeben zum wählöen und er zeigt mir die Einträge dieser KW an. Die KWs ziehe ich als Auswahlkriterium vorher aus der Tabelle raus.
SQL-Code:
SELECT distinct +'Jahr '+CONVERT(CHAR(4),datepart(YYYY,Stoer_Zeit)) +' / KW '+ CONVERT(CHAR(2),datepart(wk,Stoer_Zeit)) as JAHRKW from aktionsdaten order by JahrKW desc
|
Re: SQL Abfrage über Kalender Wochen
Ich würde das ganze über eine Kalenderfunktion machen, die Dir das Datum von bis der KW ermittelt und dann in das Feld in die WHERE Klausel einstzen.
|
Re: SQL Abfrage über Kalender Wochen
Ich würde eventuell eine View erstellen:
SQL-Code:
Um dann anschliessend mittels Join den entsprechenden Eintrag zu finden:
create view aktionsdaten_View as
select ID, datepart (wk, Stoer_Zeit) as Woche from aktionsdaten
SQL-Code:
Alternativ kannst du auch gleich alle Felder in die View übernehmen, und deine Suche dann ohne Join nur noch über diese View machen.
select a.* from aktionsdaten a join aktionsdaten_View v on v.ID=a.ID
where w.Woche = 38 |
Re: SQL Abfrage über Kalender Wochen
Hi,
Danke für die schnellen und guten tips. Ich habe nun mehrere möglichkeiten es zu implementieren. Denke ich werde mir eine View machen und dann die KWs und yyyy aus der View lesen,so bin ich ein wenig unabhängiger vom Source Code Delphi ! Nun noch eine Frage. Kann ich zb Beetween KW 2 Jahr 2005 und kw 5 jahr 2005 machen? das normale beetween vom datum hab ich schon. danke PS: Kann mir ev. noch jemand sagen wie ich meine 1. Abfrage sortieren kann. Ich hab das Problem mit der KW das die mal 1 Stellig und mal 2 Stellig ist. Danke |
Re: SQL Abfrage über Kalender Wochen
Ich empfehle nicht, eine View zu erstellen, oder die Funktion 'Datepart' zu verwenden. Der Grund ist der, das der SQL-Server dann keinen Datums-Index mehr verwenden kann.
Ich habe eine allgemeine Datumsberechnungsklasse, die mir zu einer gegebenen Periode (Woche, Monat, Quartal, Jahr etc.) den Anfangs- und Endzeitpunkt berechnet. Bei der KW wäre das z.B. Montag 00:00 bis Sonntag 23:59:59. Dann verwende ich im Query einfach ein 'BETWEEN' und dann klappts auch mit dem Index:
SQL-Code:
Für das Datumsformat verwende ich das universelle ODBC-Datumsformat, das -obwohl kaum dokumentiert- auch vom SQL-Server unterstützt wird:
Select * from Daten Where TheDateTime Between :DateFrom and :DateTo
SQL-Code:
Das Gute an diesem etwas merkwürdigen Format ist, das es überall funktioniert.
Select * from Daten Where TheDateTime Between { ts '2005-12-24 03:50:00' } and { ts '2005-12-31-2005 18:43:20' }
Ich bin mir heute nicht mir sicher, aber ich glaube, das die deutsche KW-Berechnung von der amerikanischen abweicht. |
Re: SQL Abfrage über Kalender Wochen
Hi,
also das Format für EN oder DE Datenbank ist wirklich anderst. Ich werde nun mal einiges testen was für mich besser ist. Aber ich habe noch Probleme mit der Sortierung der KA und Jahr. Weil zb die Reihen folge so ist. Mein SQL order sieht so aus. ORDER BY Jahr, Woche 2005 KW 1 2005 KW 11 2005 KW 2 2005 KW 21 und ich will es so. 2005 KW 1 2005 KW 2 2005 KW 11 2005 KW 21 Danke |
Re: SQL Abfrage über Kalender Wochen
I bekomme einfach keinen guten SQL Query hin wo ich eine Abfrage von KW2 Jahr 2005 bis KW 4 Jahr 2006 zb. machen kann.
Mit Datepart between klappts nicht bei mir. Kann mir jemand einen Tip geben? danke. |
Re: SQL Abfrage über Kalender Wochen
Hai renekr,
warum machst Du es nicht so wie von alzaimar vorgeschlagen? Wenn ich ihn richtig verstehe übergibt er direkt das Start/EndDatum einer KW als TDateTime an seine SQL-Abfrage.
Delphi-Quellcode:
procedure TDemoForm.btn_testClick(Sender: TObject);
begin with ADOQuery1 do begin Close; SQL.Text := 'SELECt * FROM aktionsdaten WEHERE Stoer_Zeit BETWEEN :starzeit AND :endzeit ORDER BY Stoer_Zeit'; Parameters.ParamByName('startzeit').Value := StartOfAWeek(2005, 2); Parameters.ParamByName('endzeit').Value := EndOfAWeek(2006, 4); Open; end; end; |
Re: SQL Abfrage über Kalender Wochen
Hi sharky,
werde ich mal testen. Danke. PS: Das mit dem Parameter. Wie muss i den Parameter erstellen? Ich habe es probiert ihn im Query einzugeben udn auch ohne. I bekomm die Meldung das der Parameter nicht existiert. Habe bis heute mit Params in Querys nicht viel gemacht. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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-2025 by Thomas Breitkreuz