PDA

View Full Version : jahr und wocher per sql



Seiten : [1] 2

steven_r
09-01-07, 07:54
Hallo zusammen,

ich habe im November 2006 ein Programm erstellt wo ich das Jahr und die Woche zusammen schneide mit diesem Statement:
set :jjjjww = dec(year(current date) concat week(current date)
, 6, 0)

aber jetzt da die Woche nur eine stelle hat bekomme ich den wert 020072 und nicht 200702 wie kann ich das ändern?

habe schon die verschiedensten varianten ausprobiert.

danke im vorraus
Steven_r
habe es gefunden hier die lösung:
set :jjjjww = year(current date) *10 concat week(current date)
trozdem Danke

Fuerchau
09-01-07, 08:08
Allerdings ist deine Routine falsch !
Korrekt wäre die Verwendung von WEEK_ISO, dabei ist dann zu berücksichtigen, dass die 1. Woche ggf. zum Vorjahr und die letzte Woche ggf. zum Folgejahr gehört.
Suche hier mal nach WEEK_ISO, birgitta hat da eine Routine zur Verfügung gestellt.

Week liefert den 1.1. immer als Woche 1.

Zusätzlich funktioniert dein SQL nur bis Woche 9 !
Korrekt: char(year(current date)*100+week(current date))

steven_r
09-01-07, 08:22
Danke für die rasche Antwort.

werde das mit Week_iso einbauen.

B.Hauser
09-01-07, 08:26
Hallo,

in der iNN - eNews 7/2006 (www.iNN-Online.de (http://www.iNN-Online.de)) war die Prozedur, die Du benötigst.

Hier nochmals:

H NoMain
*-------------------------------------------------------------------------
D/Copy QPROLESRC/DateFkt
D YearWeekIso PR 6S 0
D ParmDate D
************************************************** ************************
P* Procedure name: YearWeekIso
P* Purpose: Ermitteln Jahr + Kalenderwoche aus Datum
P* Returns: YYYYKW (6S 0)
P* Parameter: ParmDate => Datum
************************************************** ************************
P YearWeekIso B Export
D YearWeekIso PI 6S 0
D ParmDate D

D DsYearWeek DS
D YearWeek 6S 0
D DsYear 4S 0 Overlay(YearWeek)
D DsWeek 2S 0 Overlay(YearWeek: *Next)
*-------------------------------------------------------------------------
C/EXEC SQL Set Option DatFmt = *ISO, TimFmt = *ISO
C/END-EXEC

C/EXEC SQL Set :DSWeek = Week_ISO(:ParmDate)
C/END-EXEC

C/EXEC SQL
C+ Set :DSYear = Case When Month(:ParmDate) = 12 and :DsWeek = 1
C+ Then Year(:ParmDate) + 1
C+ When Month(:ParmDate) = 1 and :DSWeek >= 52
C+ Then Year(:ParmDate) - 1
C+ Else Year(:ParmDate)
C+ End
C/END-EXEC
C Return YearWeek
P YearWeekIso E

Birgitta

DEVJO
03-09-09, 10:32
Ich versuche das ganze gerade zu implementieren in meinen eigenen Datums-Service.

Problem ist, wenn ich das ganze umwandeln will mit


CRTSQLRPGI OBJ(DEVJO/SRV_DATUM)
COMMIT(*NONE)
OBJTYPE(*MODULE)
REPLACE(*YES)
DATFMT(*ISO)
CRTSRVPGM SRVPGM(DEVJO/SRV_DATUM)
BNDSRVPGM(SRV_TUSCHP)
ACTGRP(NORECLAIM)

Bekomme ich die Fehlermeldung SQL8008, welcher auf einen Internen Fehler hinweist CPF5D23.
Bei IBM auf der Seite heisst es:


SQL8008
SQL8008NFür das Produkt text ist kein gültiger Lizenzschlüssel installiert, und die Auswertungsperiode ist abgelaufen. Produktspezifische Funktionen sind nicht mehr aktiv.
Erläuterung:
Es wurde kein gültiger Lizenzschlüssel gefunden, und die Auswertungsperiode ist abgelaufen.

Benutzeraktion:
Installieren Sie einen Lizenzschlüssel für die Vollversion des Produkts. Ein Lizenzschlüssel für das Produkt ist bei Ihrem IBM Ansprechpartner oder bei einem Vertragshändler erhältlich.

Was ich net wirklich nachvollziehen kann, denn SQL kann ich prinzipiel nutzen (hab mehrere SQLRPGLE Services).
Hat irgendjemand eine Ahnung?

Fuerchau
03-09-09, 10:39
Kannst du überhaupt ein SQL-Programm neu erstellen ?

Wenn ein fertiges Programm SQL enthält, benötigst du natürlich keinen SQL-Precompiler.

DEVJO
03-09-09, 10:56
Also wenn ich die Prozedur (Week) als einzelnen Service erstelle funktioniert es lustiger weise :confused: nur wenn ich die Procedure (Week) in mein SRV_Datum mit reinnehmen will, knallts....ohne die Procedur (Week) kann ich den SRV_Datum umwandeln ohne Probleme.....
Lange Rede kurzer Sinn: Einzelnd funktionierts, zusammen nicht .

Fuerchau
03-09-09, 11:07
Mach mal in deine H-Bestimmung auch einen DATFMT(*ISO), vielleicht liegts ja daran.

Andererseits benötigst du den 2. SQL ja nicht, wenn du das einfach mit Unterdefinition des ParmDate und RPG-Befehlen umsetzt.

B.Hauser
03-09-09, 11:30
Nur mal so aus Neugier unter welchem Release arbeitest Du?
Die Funktion WEEK_ISO wurde mit Release V5R1 eingeführt, konnte aber erst mit V5R2 oder V5R3 im embedded SQL eingebunden werden.

Birgitta

DEVJO
03-09-09, 11:35
Hab V6R1.....

und werde gerade ein wenig wahnsinnig hier ;)

Hab mich jetzt entschieden ein BNDDIR anzulegen und alle Einzelteile da rein zu hauen, da scheint zu funktionieren......

Wollte zwar ursprünglich nur einen Service haben, aber so geht´s auch und erfüllt den selben Zweck :)

Aber das Problem ist mir ein Rätsel! :confused: