PDA

View Full Version : Datumsprüfung



Seiten : [1] 2

Stefan_R
13-08-01, 11:44
Hallo,
ich suche eine Möglichkeit zu prüfen ob ein Datum ein Werk- oder Wochenendtag ist!
Da gibt's doch sicher was.

Kann mir jemand auf die Sprünge helfen?


Gruss
Stefan

schreibr
13-08-01, 13:17
Hallo Stefan,
da gibt es einen SYSVAL, der heisst QDAYOFWEEK und den kannst Du mit RTVSYSVAL in jedem CL abfragen.
Gruss Reinhold

Fuerchau
13-08-01, 15:42
Am einfachsten geht es mit SQL:

/EXEC-SQL
+ SET :WTAG = WEEKDAY( http://www.as400-forum.de/ubb/biggrin.gifATUM)
/END-EXEC

Die Variable WTAG muss dezimal sein, die Variable DATUM in einem gültigen Datumformat.

Der Systemwert QDAYOFWEEK bestimmit nur den Wochentag des aktuellen Systemdatums.

Ursus
16-08-01, 12:38
Sollte Dir das SQL-Statement nicht ausreichen, dann bleibt Dir auch die Möglichkeit, den Betriebskalender der AS/400 abzufragen, dort mußt Du allerdings zuerst die Feiertage, Brückentage oder ähnliches einpflegen, aber dann kannst Du zu jedem Datum prüfen, ob IHR dort Werktag hattet oder nicht.

MfG, Marc

tarkusch
28-11-12, 19:08
Am einfachsten geht es mit SQL:

/EXEC-SQL
+ SET :WTAG = WEEKDAY( http://www.as400-forum.de/ubb/biggrin.gifATUM)
/END-EXEC

Die Variable WTAG muss dezimal sein, die Variable DATUM in einem gültigen Datumformat.

Der Systemwert QDAYOFWEEK bestimmit nur den Wochentag des aktuellen Systemdatums.
Hallo,

Wie bekomme ich eigentlich von einem Datum(20121001) am elegantesten Wochentag und Wochennummer raus?

Danke

Tarki

Fuerchau
28-11-12, 19:15
Auch wieder SQL:

d MyNumDate 8P 0
d myDate 10
d SqlWeekday 5I 0
d SqlWeek 10I 0

myDate=%editw(MyNumDate,'____.__.__');

exec sql set : SqlWeekday = weekday(date(: myDate));
exec sql set : SqlWeek = week_iso(date(: MyDate));

Es gibt sicherlich wieder mal elegantere Lösungen.

Beachte bitte bei Wochen 1 und 53, dass hier ggf. das Vor- oder Folgejahr gemeint sein kann.

tarkusch
28-11-12, 19:29
thaaaaaaaaaaaaaanks.

lang elegant gut ;)

tarkusch
28-11-12, 19:53
Abend,

darf ich Sie noch ein allerletztes mal für heute um Hilfe bitten.



D I S 8P 0 inz(*ZEROS)
d myDate S 10
d SqlWeekday S 5I 0
d SqlWeek S 10I 0

myDate=%editw(I:' . . ');
exec sql SET :SqlWeekday = WEEKDAY(date(:MyDate));
exec sql SET :SqlWeek = week_iso(date(:MyDate));


Was habe ich da falsch gemacht?

ich habe bis dato kein exec sql so abgesetz(Vorher /Free nachher /End-free), gehört das eventuell auf eine bestimmte position?
Haben V6R1M0

B.Hauser
29-11-12, 07:45
YYYY.MM.DD ist keine gültige alphanumerische Darstellung eines Datums!

Gültige Formate sind: YYYY-MM-DD, DD.MM.YYYY, MM/DD/YYYY

... und was die wenigsten wissen: 'YYYYMMDDHHMMSS' wird als gültiges Format angesehen, d.h. das Datum einfach nach alpha konvertieren und 6 Nullen dranhängen und schon funktionierts.

Das folgende Beispiel funktioniert:

D MyDate S 8P 0 inz(20121011)

D DSTS DS
D MyTS 14A
D MyDateA 8A Overlay(MyTS)
D MyTimeA 6A Overlay(MyTS: *Next) inz('000000')

D MyWeekDay S 1P 0
D MyWeekISO S 3P 0
*---------------------------------------------------------
/Free
MyDateA = %EditC(MyDate: 'X');
Exec SQL Set (:MyWeekDay, :MyWeekIso) = (DayOfWeek_ISO(:MyTS),
Week_ISO(Date(:MyTS)));
Dsply MyWeekDay;
Dsply MyWeekISO;
*INZSR = *On
/End-Free

Fuerchau
29-11-12, 10:44
Bei den 6 Nullen, da sagst du was, das mag auch %date() und SQL:

d myNumdate 8P 0
d myDate D

myDate = %date(myNumDate * 1000000);