DB2 Problem, Order by Datum: Apr-04,JAN-05..

SQLNixe

Grünschnabel
Hallo,
ich habe ein DB2 Problem bei dem ich langsam verzweifel, weil eigentlich kann´s doch nicht so schwer sein. (In Oracle ist alles viel besser) : )

Meine Ausgabe sieht wie folgt aus :
Mon-YY, sum(Wert1) , sum(Wert2)

wobei Mon-YY ein Varchar Feld ist, die Werte jeweils double Felder.

SQL vereinfacht(da nur der Monat für mich gerade ein Problem ist):

SELECT x.XMONTH
FROM DSD.Tab1 A, DSD.Tab2 x , DSD.Tab3 as P
WHERE x.ID = A.ID
AND A.ID = P.ID
AND x.VERSION = A.VERSION
AND A.VERSION = P.Version
AND A.ACCOUNT_ID in x.ACCOUNT_ID
and a.id = '999'
group by x.XMONTH
order by x.xmonth


Gibt es in Db2 einen Befehl , womit ich das varchar in ein Date(mon-yy) konvertieren kann UND danach korrekt sortieren?
Zur Zeit sortiert er nach charakter-Form jedoch nicht nach Date-Form (also Jan-05,Feb-05....)

ich hab schon versucht mit TRUNC , to_date, date, year ... zu arbeiten , erhalte jedoch immer die Meldung "Es wurde keine berechtigte Routine "CHAR" des Typs "FUNCTION " mit kompatiblen Argumenten gefunden."

Könnt ihr mir weiterhelfen ?

Danke!!
 

Anhänge

  • Date.jpg
    Date.jpg
    8,2 KB · Aufrufe: 74
Hallo,

ich kenn mich mit DB2 leider nicht gut aus, evtl. wird aber folgende Syntax beim Formatstring unterstützt:

SQL:
...
ORDER BY TO_DATE(x.month,'MMM-YY');

Markus
 
nein, leider funktioniert das nicht :

Fehlermeldung wie schon oben genannt:
Der Datentyp, die Länge oder der Wert des Arguments "2" der Routine "SYSIBM.TO_DATE " ist ungültig.

; (
 
Hallo nochmal,

wenn das Format der Spalte wie auch der Inhalt feststeht und sich gar nicht ändern lässt, wäre zumindest unter Oracle folgende Lösung denkbar:

SQL:
....
order by to_date(
            decode(
              substr(xmonth,1,3),'Jan','01','Feb','02','Mar','03','Apr','04','May','05','Jun','06','Jul','07','Aug','08','Sep','09','Oct','10','Nov','11','Dec','12'
                )  || substr(xmonth,5),'MM-YY');

nicht schön, aber funktioniert. Ich glaub nur, dass es DECODE unter DB2 nicht gibt. Eventuell mit einer eigenen Funktion nachhelfen, die genau die Ersetzung übernimmt.

Markus
 
Moin SQLNixe,

Du magst die Antwort vielleicht nicht so gerne lesen, aber das Problem ist:

[Zitat]
Problem
Oracle provides a TO_CHAR() function to convert a datetime into a formatted string. DB2 does not provide this function. This hint shows how an extendible to_char function can be built in DB2

Beschreibung und Workaround (na ok, eigentlich "Lösung" und nicht Workaround) hier:
http://www-1.ibm.com/support/docview.wss?uid=swg21006377
"Mapping of Oracle's TO_CHAR function to DB2 UDB"

Gruss
Biber2
 
Zurück