Seite 1 von 1

ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 13:37
von UliTs
Hallo Allerseits,

ich muß einen eigentlich einfachen Filter setzen und möchte wegen der drastischen Geschwindigkeitsvorteile, daß der ADS in der Lage ist, ihn aufzulösen.
Unglücklicherweise muß ich dabei ein Datumswert und ein Zeichenfeld der Form "WWJJJJ" (WW=Kalenderwoche) mit einer Konstanten in der Form "WWJJJJ" vergleichen. Meine Idee ist, daß ich den Filter mit der WEEK-Funktion des ADS bilde:

Code: Alles auswählen

"WEEK(Datum)='522008'"
Wahrscheinlich ist obiger Code aber falsch.
In der ADS habe ich keine genaueren Angaben über die WEEK-Funktion gefunden. Kennt jemand die genaue Semantik? :D

Uli

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 14:19
von Tom
Hallo, Uli.

Welche "ADS-Funktion" Week() meinst Du? Es gibt m.E. in der ACE-API keine Funktion dieses Namens, aber in den Xbase-Tools. Letztere liefert den Ordinalwert der Kalenderwoche zurück. Dein Vergleich müsste in diesem Fall so lauten:

Code: Alles auswählen

Str(Week(Datum),2,0)+Str(Year(Datum),4,0)='522008'
Das aber macht im Hinblick auf die von Dir erwünschten Performanceeffekte keinen Sinn. Wo hast Du diese ominöse Funktion gefunden?

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 14:23
von brandelh
Hallo,

mit ADS habe ich zwar nichts am Hut, aber mir will nicht einleuchten,
warum man zuerst die Woche und dann das Jahr schreiben sollte.
Wer fragt schon nach Wochen über mehrere Jahre ?

"200842" für 42. Woche in 2008 fände ich sinnvoller.

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 14:42
von UliTs
Hallo Tom,

hier meine Info, die ich über den Data Architekten (Help/Contents) rausbekommen habe (was bedeutet eigentlich "1-based"?):
Bild2.gif
Bild2.gif (7 KiB) 4930 mal betrachtet
Die Funktion liefert also einen numerischen Wert zurück und leider nicht auch das zugehörige Jahr (in Deinem Beispiel haut das zum Jahres ende ja nicht immer hin).Nur entspricht der Wert der europäischen Wochenangabe? Ist das irgendwo einstellbar? Wie bekomme ich das zur KW gehörende Kalenderjahr raus?
Daran scheitere ich momentan.

Die einzige Lösung, die ich zur Zeit sehe, ist die Tabelle zu ändern, was wegen des notwendigen Exklusivzugriffs auf die Tabelle nicht möglich ist (oder?).

Uli

-
Hubert, klar sollte man bei der eigentlichen Umsetzung auf "JJJJMM" vergleichen

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 15:03
von brandelh
Die Funktion Week(datum) gibt es in Xbase++ auch, sie fehlt aber in der Hilfe.

1-based lese ich als "1 ist der kleinste Wert", sie kann aber bis 53 (54?) gehen.
In vielen Sprachen beginnen Array-Indexe mit 0, daher die Klarstellung.

Der 1. Januar kann auch in der 53. Woche des Vorjahres liegen.
Dazu gab es schon mehrere Threads mit der Wochenzahl.
Die ADS basiert doch auf Xbase/Clipper oder ?
Sicher halten die sich an die gleichen Regeln.

? week(datum) -> Wochennummer des Datums
? year(datum) -> in welchem Jahr liegt das Datum

Die 53. Woche gehört immer zum letzten Jahr, wenn also ein Datumswert aus dem Januar die 53. Woche ergibt, gehört die Woche zum Vorjahr.

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 15:25
von UliTs
Hallo Hubert,

danke für den Hinweis bezüglich "1-based". Ich glaube, es ist so wie Du schreibst.
-
Die bisherigen Nachrichten über Wochen-Funktionen bezogen sich immer auf xBase / Clipper und nicht auf den ADS.
-
Das mit der Funktion WEEK() im ADS-Server hat sich erübrigt, da sie als "supported scalar function" nur in SQL-Statements genutzt werden kann und nicht in in der "advantage expression engine" und damit nicht innerhalb Filterausdrücken.

Uli

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 16:06
von brandelh
UliTs hat geschrieben: Die bisherigen Nachrichten über Wochen-Funktionen bezogen sich immer auf xBase / Clipper und nicht auf den ADS.
wobei die Problematik mit den Wochenüberläufen (also > 52) immer gleich ist.

Nutzt du nicht die SQL Befehle um die Datenmenge zu begrenzen ?

Code: Alles auswählen

select * where week(...)= ...

Re: ADS Funktion WEEK

Verfasst: Di, 07. Okt 2008 17:55
von UliTs
Hallo Hubert,

es handelt sich um eine DBF-NTX-Tabelle. Der ADS unterstützt SQL nur bei DBF-CDX und ADT-Tabellen.

Uli