![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos
Daten aller Donnerstage im Monat
Hi,
Der Titel ist etwas komisch. Also was ich gerne hätte ist, eine Query, die mir die Daten von z.B. jedem Donnerstag eines Monats zurückliefert... 07.01.10,14.01.10,21.01.10,28.01.10. Geht sowas halbwegs einfach? Gruß Neutral General |
Re: Daten aller Donnerstage im Monat
Meinst Du
Delphi-Quellcode:
If DayOfTheWeek = 4 Then ...
|
Re: Daten aller Donnerstage im Monat
Du hast schon gemerkt dass ich von Firebird SQL und nicht von Delphi rede?
|
Re: Daten aller Donnerstage im Monat
SQL-Code:
select EXTRACT( Weekday from <Datumsfeld>) from <Tabelle>;
|
Re: Daten aller Donnerstage im Monat
Ich weiß nicht wie groß deine Datenbank sein wird, aber ich denke an der Stelle ist es sinnvoll eine Spalte für den Wochentag einzuführen. Die Berechnung, um welchen Wochentag es sich an diesem Tag handelt muss für jede Zeile einmal gemacht werden - und das bei jedem Query. Da wäre eine weitere Spalte "Wochentag" mit einem kleinen Int zwischen 0 und 6 denke ich sinnvoll. :-)
Liebe Grüße, Valle |
Re: Daten aller Donnerstage im Monat
Tut mir bitte einen Gefallen und lest meine Frage bevor ihr antwortet... :roll:
Es geht darum dass ich folgendes habe: Wochentag (z.B. 3 = Mittwoch) und einen Monat (5 = Mai) und ich jetzt per SQL die Daten aller Mittwoche im Mai des aktuellen Jahres erhalten will. |
Re: Daten aller Donnerstage im Monat
Ermittle den ersten Donnerstag des Monats und dann zähle immer 7 dazu
|
Re: Daten aller Donnerstage im Monat
Und wie mache ich das?...
|
Re: Daten aller Donnerstage im Monat
selbst mySQL kennt Funktionen um den Wochentag eines Datums zu bekommen ... das sollte also für Firebird ebenso nicht schwer sein.
|
Re: Daten aller Donnerstage im Monat
Zitat:
Er möcht aber alle Donnerstage eines Monats und nicht ermitteln, ob ein Datum ein Donnerstag ist. |
Re: Daten aller Donnerstage im Monat
Zitat:
Ich weiß wie ich den Wochentag eines Datums herausfinde. Das ist nicht das Problem :roll: Ich weiß nur nicht wie ich z.B. alle Wochentage eines Monats durchlaufen kann und dann die zurückgeben kann, die ein Donnerstag sind. Edit: Roter Kasten hat Urlaub |
Re: Daten aller Donnerstage im Monat
... und wenn selbst nicht, dann bastelt man das eben selber.
Modulo 7 kennt jede Programmiersprache ... |
Re: Daten aller Donnerstage im Monat
Per Hand: Ermittele Tag von 1. des Monats -> Datum des 1.Donnerstag
|
Re: Daten aller Donnerstage im Monat
praktisch irgendwie so?
SQL-Code:
... where WOCHENTAG('datumsfeld') = 3
|
Re: Daten aller Donnerstage im Monat
Dazu müssten alle tage eines Monats in einer Tabelle stehen.
|
Re: Daten aller Donnerstage im Monat
@himitsu, dass ginge wenn ich das ganze Jahr in einer Tabelle gespeichert hätte^^ Habe ich aber nicht.
Ich glaube ich brauche sowas wie ne Stored Procedure oder so. Man gibt Monat und Wochentag ein und die Procedure gibt Datum1,Datum2,Datum3,Datum4 zurück (ggf. NULL, falls es nur 3 Donnerstage gibt oder so). Im Prinzip brauche ich sowas nur in SQL:
Delphi-Quellcode:
function GetWochentage(AMonat: TMonat; AWochentag: Integer): TList<TDate>;
var i: Integer; begin for i := 0 to AMonat.TageCount-1 do if AMonat.Tage[i].Wochentag = AWochentag then Result.Add(AMonat.Tage[i].Date); end; |
Re: Daten aller Donnerstage im Monat
... und wenn du das hier umstrickst?
Delphi-Quellcode:
// Source: [url]http://www.mycsharp.de/wbb2/thread.php?threadid=74208[/url]
// Translated by DeddyH - Delphi-PRAXiS // Useful. if you search for f.e. last thursday in August of 2009 function LastDayOfWeekOfMonth(year,month: Integer;DayOfWeek: TWeekDay):TDate; var temp: TDate; begin temp := IncMonth(EncodeDateTime(year,month,1,0,0,0,0)); Result := IncDay(temp,(DayOfWeek - DayOfTheWeek(temp) + 7) mod 7 - 7); end; |
Re: Daten aller Donnerstage im Monat
Wolfgang? Weißt du was SQL ist?
|
Re: Daten aller Donnerstage im Monat
Ja :)
|
Re: Daten aller Donnerstage im Monat
SQL-Code:
select 'datumsfeld' from 'datumstabelle'
where (WOCHENTAG('datumsfeld') = :suchwochentag) and (MONAT('datumsfeld') = MONAT(:suchdatum)) and (JAHR('datumsfeld') = JAHR(:suchdatum)) |
Re: Daten aller Donnerstage im Monat
@Wolfgang: Dann weißt du auch dass mir (d)ein Delphi Code absolut nichts nutzt?
In Delphi könnte ich mir sone Funktion auch schreiben. Aber es geht darum, dass ich keine Ahnung habe wie ich es in SQL machen soll @himitsu: Es gibt kein 'datumsfeld'.. Das haben mkinzler und ich schon mehrmals versucht zu erklären :| |
Re: Daten aller Donnerstage im Monat
wie jetzt,
du hast keine Tabelle und willst von der DB nur jeweils das Datum mit einem bestimmten Wochentag aus dem Nichts bekommen? |
Re: Daten aller Donnerstage im Monat
Zitat:
|
Re: Daten aller Donnerstage im Monat
Zitat:
|
Re: Daten aller Donnerstage im Monat
Dirty hack:
SQL-Code:
CREATE OR ALTER PROCEDURE WOCHENTAGEEINESMONATS (
monat smallint, wtag smallint, jahr integer) returns ( datum date) as declare variable m smallint; begin select extract( weekday from cast ( :jahr || '.' || :monat || '.01' as date)) from rdb$database into :m; m = MOD( :wtag + :m - 2, 7); while (:m <= 31 /* mit berechneten Maxdatum des Monats ersetzen */) do begin datum = cast( :jahr || '.' || :monat || '.' || m as date); m = :m + 7; suspend; end end |
Re: Daten aller Donnerstage im Monat
...
|
Re: Daten aller Donnerstage im Monat
ist Käse wenn man nicht lesen kann :oops:
alex |
Re: Daten aller Donnerstage im Monat
Hi,
Danke an alle und vorallem an mkinzler und omata die sich viel Mühe gemacht haben :zwinker: Ich wollte das ursprünglich über SQL lösen weil ich diese Daten in FreeReport brauchte und es eben um einiges einfacher ist die Daten in SQL mitzuselektieren als sie in Delphi noch mühsam in die Datensätze einfzufügen. Habe mich allerdings jetzt doch dafür entschieden die Berechnung der Wochentage in Delphi durchzuführen. Für die Leute dies interessiert poste ich hier jetzt die Schlüsselfunktion die die Daten aller (z.B.) Donnerstage im Januar des aktuellen Jahres in eine TList<TDate> schreibt.
Delphi-Quellcode:
procedure AddWochentage(AMonat, AWochentag: Byte; ADestList: TList<Date>);
var start: TDateTime; i: Integer; begin start := EncodeDate(YearOf(now),AMonat,1); for i := 0 to DaysInMonth(start) - 1 do begin if DayOfWeek(start)-1 = AWochentag then ADestList.Add(start); start := IncDay(start); end; end; // Aufruf: var AList: TList<TDate>; begin // .. AList erstellen .. AddWochentage(1,4,AList); end; // Ergebnis: // - 07.01.10 // - 14.01.10 // - 21.01.10 // - 28.01.10 |
Re: Daten aller Donnerstage im Monat
man könnte es notfalls noch etwas kürzen
Delphi-Quellcode:
procedure AddWochentage(AMonat, AWochentag: Byte; ADestList: TList<Date>);
var start: TDateTime; i: Integer; begin start := EncodeDate(YearOf(Now), AMonat, 1); for i := 0 to DaysInMonth(start) - 1 do if DayOfWeek(start + i) - 1 = AWochentag then ADestList.Add(start + i); end; |
Re: Daten aller Donnerstage im Monat
Mh, dann wird doch start nicht hochgezählt.
|
Re: Daten aller Donnerstage im Monat
wollte schon "doch" sagen, aber sah grad noch 'nen Vertipper ... so, jetzt kann ich es
Zitat:
|
Re: Daten aller Donnerstage im Monat
Ja so gehts natürlich auch :mrgreen:
|
Re: Daten aller Donnerstage im Monat
Ist für Access, keine Ahnung ob´s hilft
SQL-Code:
SELECT t_Messung.Datum, Weekday(t_Messung.Datum) AS Werktag
FROM t_Messung WHERE (((Weekday(t_Messung.Datum))=5)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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