Simone T.: SQL-Statement im DB2-Umfeld

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

  1. 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

    1. 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...

      :-(

      1. 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.