SQL-Statement im DB2-Umfeld
Simone T.
- programmiertechnik
Hallo liebe Forumsmitglieder,
ich habe folgendes Problem:
Ich muß in eine Tabelle grundsätzlich den Vormonat (inkl. Jahr) in diesem Format einstellen: JJJJ.MM
Das Feld CURRENT DATE liefert mir 09.06.2008
Wie bekommen ich am einfachsten mein Feld (ist ein normalen CHAR-Feld) mit dem Wert 200805 gefüllt ?
Danke für eine Hilfestellung an eine Anfängerin
Hallo,
Ich muß in eine Tabelle grundsätzlich den Vormonat (inkl. Jahr) in diesem Format einstellen: JJJJ.MM
Grundsätzlich könntest Du dieses Problem mit der Funktion VARCHAR_FORMAT(timestamp_expression, format_string) lösen. Statt CURRENT_DATE verwendest Du in diesem Fall CURRENT_TIMESTAMP. Datumsarithmetik ist im SQL-Dialekt von DB2 intuitiv gestaltet, somit kämst Du zu folgendem Ausdruck:
VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYY.MM')
Wie bekommen ich am einfachsten mein Feld (ist ein normalen CHAR-Feld) mit dem Wert 200805 gefüllt ?
Möchtest Du nun JJJJ.MM oder JJJJMM? Falls letzteres, so lasse im Formatstring einfach den Punkt weg:
VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
Mit DB2 habe ich normalerweise nichts zu tun, aber der Code ist getestet und liefert die gewünschten Ergebnisse.
Freundliche Grüße
Vinzenz
Hallo,
Ich muß in eine Tabelle grundsätzlich den Vormonat (inkl. Jahr) in diesem Format einstellen: JJJJ.MM
Grundsätzlich könntest Du dieses Problem mit der Funktion VARCHAR_FORMAT(timestamp_expression, format_string) lösen. Statt CURRENT_DATE verwendest Du in diesem Fall CURRENT_TIMESTAMP. Datumsarithmetik ist im SQL-Dialekt von DB2 intuitiv gestaltet, somit kämst Du zu folgendem Ausdruck:
VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYY.MM')
Wie bekommen ich am einfachsten mein Feld (ist ein normalen CHAR-Feld) mit dem Wert 200805 gefüllt ?
Möchtest Du nun JJJJ.MM oder JJJJMM? Falls letzteres, so lasse im Formatstring einfach den Punkt weg:
VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
Mit DB2 habe ich normalerweise nichts zu tun, aber der Code ist getestet und liefert die gewünschten Ergebnisse.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
Danke für Deine Antwort.
Was ich noch nicht weiß ist, wie ich den Tabellennamen und die betroffene Spalte ansprechen kann.
Ich habe es jetzt mal so probiert, geht aber nicht:
UPDATE Tabelle
SET Spalte = VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
-> Fehler im 2.Argument...
:-(
Hallo Simone,
Grundsätzlich könntest Du dieses Problem mit der Funktion VARCHAR_FORMAT(timestamp_expression, format_string) lösen. Statt CURRENT_DATE verwendest Du in diesem Fall CURRENT_TIMESTAMP. Datumsarithmetik ist im SQL-Dialekt von DB2 intuitiv gestaltet, somit kämst Du zu folgendem Ausdruck:
Wie bekommen ich am einfachsten mein Feld (ist ein normalen CHAR-Feld) mit dem Wert 200805 gefüllt ?
VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
Was ich noch nicht weiß ist, wie ich den Tabellennamen und die betroffene Spalte ansprechen kann.
Ich habe es jetzt mal so probiert, geht aber nicht:
UPDATE Tabelle
SET Spalte = VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
UPDATE
test
SET
vormonat = VARCHAR_FORMAT(CURRENT_TIMESTAMP - 1 MONTH, 'YYYYMM')
WHERE
ID = 5;
wird von meiner DB2 Express anstandslos verarbeitet. Dabei spielte es unerheblich, ob die Spalte vom Typ VARCHAR(6) oder CHARACTER(6) war.
Freundliche Grüße
Vinzenz
PS: Bitte keine Fullquotes.