PDA

View Full Version : Query Problem ändern eines Textfeldes in DEC



stragami
06-08-10, 10:11
Hallo zusamen,

ich bemötige ein wenig Hilfe:

Um eine Query zu schreiben muss ich zunächst einen String zerlegen:

421060105077401

dieser bildet den Buchhaltungsschlüssel ab
zerlegt sieht dieser nun so aus

42 = t01.office
16 = t01.verkehr
507740 = t01.jobclock
das sind die felder ich ich benötigt um das entsprechende record zu finden
soweit sogut

speicher ich das nun und verknüpfe diese Date mit der datei in der sich das record befindet

also:
t02.crgicd eq t01.office
t02.crwuch eq t01.verkehr

und
t02.crrqrn= t01.jobclock

bekomme ich bei der letzten verknüpfung

eine Fehlermedung da das field t01.jobclock nicht numeric ist

ich muss also bei dem zerlegen und speichern das field t01.jobclock als numeric speichern.
nur wie geht das oder geht das überhaupt
Gruß
Alfred

Khholm
06-08-10, 10:52
das Problem habe ich auch immer mal wieder.
Meines Wissens kann Query aus char nicht dec machen.
Ich löse solche Probleme andersrum, aus dem Dec Feld in der einen Datei (mittels Quey) ein char machen (Zwischendatei) und dann kann ich char mit char verknüpfen.

Was besseres ist mir bis jetzt nicht eingefallen.

kh

Fuerchau
06-08-10, 11:22
Am Besten legt man sich eine View an, die das Ergebnis korrekt liefert und führt das Query auf die View aus:

STRSQL
create view MyView as (
select ... dec(substr(field, 1, 3), 3, 0) numf1, ...
from ...
)

stragami
06-08-10, 11:29
Am Besten legt man sich eine View an, die das Ergebnis korrekt liefert und führt das Query auf die View aus:

STRSQL
create view MyView as (
select ... dec(substr(field, 1, 3), 3, 0) numf1, ...
from ...
)

wenn ich das richtig verstehe kann ich das nicht im bereich "define Result Fields" machen oder?

B.Hauser
06-08-10, 11:44
Dein Problem ist, dass Du über das Feld verknüpfen musst.

Im Bereich Define Result Fields kannst Du nur Ausgabe-Felder definieren.

Du hast nur zwei Möglichkeiten:
1. Wie Baldur vorschlägt, Du erstellst entweder selber oder lässt von jemand eine SQL View erstellen, die nicht nur das Feld aufsplittet und konvertiert, sondern auch noch gleich mit der zweiten Datei verknüpft. Diese SQL View kannst Du dann wie jede andere Datei im Query/400 verwenden.

2. Wie kh vorschlägt, du generierst mit Query/400 zwischen Dateien, in denen die Felder aufgesplittet sind, bzw. eine Spalte für das numerische join-Feld (mit DIGITS(NumFld)) gebildet wurde. Diese Dateien verknüpfst Du dann in einem weiteren Query.

(Mit Trick 17 bzw. Konvertierung in Milisekunden ist es auch möglich alpha Felder in numerische Werte zu konvertieren, aber der andere Weg mit Digits aus numerischen Werten alphanumerische Werte zu generieren ist wesentlich einfacher.)

Birgitta

stragami
06-08-10, 12:15
Mir blebt nur der weg 2.

Sorry aber ich habe sehr viel verlernt da ich das über 4 Jahre nicht mehr gemacht habe....

dabei bin ich dann wieder im defeine result fileds da ich hier wohl das feld (das neue ausgabefeld) definiren muss um eine kopie der datei zu bekommen.

soweit richtig?

in field nehm ich einen neuen namen
aber was kommt dann ins feld expression rein?

stragami
06-08-10, 12:33
das Problem habe ich auch immer mal wieder.
Meines Wissens kann Query aus char nicht dec machen.
Ich löse solche Probleme andersrum, aus dem Dec Feld in der einen Datei (mittels Quey) ein char machen (Zwischendatei) und dann kann ich char mit char verknüpfen.

Was besseres ist mir bis jetzt nicht eingefallen.

kh

nur wir mache ich das?

Fuerchau
06-08-10, 13:22
Wenn du es mit Query und Ausgabedateien benötigst, kannst du aus Dec-Feldern Char-Felder mit der Funktion DIGITS machen.
Per SUBSTR kannst du aus Char-Feldern neue Teilfelder generieren.

Allerdings werden deine Abfragen nicht performant werden, da du ja zwei Ausgabedateien miteinander verknüpfst, die jedoch keinen Index aufweisen.

Versuche es besser per SQL z.B. mit QM-Query.
Per QM-Query kannst du deinen Select stricken und in eine Datei ausgeben, die du dann nur noch per Query/400 schön formatierst.

stragami
06-08-10, 15:02
porblem gelöst
besten dank!

danke & gruß
alfred