ADS Funktion WEEK

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

ADS Funktion WEEK

Beitrag 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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?
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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) 4879 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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(...)= ...
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS Funktion WEEK

Beitrag 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten