piep: Sysdate und Co

Also folgendes, ich suche schon ne ganze Zeit im Netz und so, aber ich finde keine konkrete Lösung für mein Problem.

Ich habe mit Hilfe des Befehls SYSDATE das aktuelle Datum auf eine Oracle-Datenbank schreiben lasse:
Tabelle heißt "historie" die Spalte "historie_datum_zeit"!
INSERT INTO historie (historie_datum_zeit) values (sysdate);

Danach habe ich mit Hilfe von Perl und dem Befehl "to_char" das Datum und die Zeit auslesen und in ein Formularfeld schreiben lassen:
SELECT TO_CHAR(historie_datum_zeit, 'DD.MM.YYYY "/" HH24:MI" Uhr"') FROM historie WHERE historien_id=2;

Ergebnis (so stehts dann im Feld drin): 29.09.2003 / 15:10 Uhr

Soweit so gut, bis hierhin klappt auch alles.
Jetzt wollte ich aber gerne das Datum und die Uhrzeit in dem Formularfeld verändern und dann wieder auf die Datenbank schreiben. Leider klappt das nicht, weil auf der Datenbank nur folgendes steht "29-SEP-03". Und ich kann auch nur updaten, wenn ich das Datum genau so im Formular eingebe.

Wie mache ich das am besten von der Logik her und wie kann ich das umsetzen?

  1. Hi,

    Jetzt wollte ich aber gerne das Datum und die Uhrzeit in dem Formularfeld verändern und dann wieder auf die Datenbank schreiben.

    dazu gibt es die Gegenfunktion TO_DATE().

    Leider klappt das nicht, weil auf der Datenbank nur folgendes steht "29-SEP-03".

    Nein, die DB speichert das Datum in einer internen Repräsentation. Was immer Du (wo auch immer) anzeigen lässt, ist das Ergebnis einer Konvertierung - die Du mit TO_CHAR() beeinflussen kannst.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallöchen! Danke für die schnelle Antwort.

      dazu gibt es die Gegenfunktion TO_DATE().
      Gut, aber wie kann ich denn jetzt sagen, dass ich ein bestimmtestDatum (+Zeit), dass ich mit TO_CHAR zuvor ausgelesen habe, wieder mit TO_DATE einlesen kann.

      In der Variablen $datum steht folgendes "29.09.2003 / 15:10 Uhr", sprich in dem Format 'DD.MM.YYYY "/" HH24:MI" Uhr"'! Wie kann ich die einzelnen Teile denn jetzt durch TO_DATE wieder in die Datenbank einlesen lassen?

      SpalteDatumZeit = to_date($datum, 'DD.MM.YYYY "/" HH24:MI" Uhr"');
      So gehts z.B. nicht!

      1. Hi,

        SpalteDatumZeit = to_date($datum, 'DD.MM.YYYY "/" HH24:MI" Uhr"');
        So gehts z.B. nicht!

        "geht nicht" geht nicht. Was ist das Problem dabei, wie lautet Deine Analyse derselben? Was beispielsweise hast Du mit der Fehlermeldung gemacht, sofern eine ausgespuckt wurde?

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          SpalteDatumZeit = to_date($datum, 'DD.MM.YYYY "/" HH24:MI" Uhr"');
          So gehts z.B. nicht!

          "geht nicht" geht nicht. Was ist das Problem dabei, wie lautet Deine Analyse derselben? Was beispielsweise hast Du mit der Fehlermeldung gemacht, sofern eine ausgespuckt wurde?

          Hä? Nein, folgendes, ich weiß gar nicht wie die "To_Date"-Funktion arbeitet.
          Was für Werte kann diese Funktion eigentlich verarbeiten und wie bastelt sie beliebige Eingaben in ein Datum.
          Das Verständins würde mir schon mal sehr weiter helfen.

          1. Hi,

            Hä? Nein, folgendes, ich weiß gar nicht wie die "To_Date"-Funktion arbeitet.

            was macht man in so einem Fall als erstes? Richtig, in der Doku nachschlagen. Und was hat das bei Dir ergeben?

            Was für Werte kann diese Funktion eigentlich verarbeiten

            Einen String, ein Format (sofern der String vom Standardformat abweicht), und bei Bedarf eine zusätzliche Angabe zur verwendeten Landessprache.

            und wie bastelt sie beliebige Eingaben in ein Datum.

            Indem Du sagst, wie diese beliebige Eingabe aussieht. Im Prinzip wirklich ganz exakt anders herum als TO_CHAR().

            Das Verständins würde mir schon mal sehr weiter helfen.

            Schaue hierzu _immer_ zunächst in der Doku nach. Dazu ist sie schließlich da :-)

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. was macht man in so einem Fall als erstes? Richtig, in der Doku nachschlagen. Und was hat das bei Dir ergeben?

              Was glaubste denn, was ich gemacht habe!???!
              Hab im "SQL Language Reference Manual" nachgelesen, aber da bin ich nicht wirklich schlau raus geworden.

              Was für Werte kann diese Funktion eigentlich verarbeiten
              Einen String, ein Format (sofern der String vom Standardformat abweicht), und bei Bedarf eine zusätzliche Angabe zur verwendeten Landessprache.

              Also genau so, wie ich es probiert habe! *lol*

              und wie bastelt sie beliebige Eingaben in ein Datum.
              Indem Du sagst, wie diese beliebige Eingabe aussieht. Im Prinzip wirklich ganz exakt anders herum als TO_CHAR().

              Also doch:
              $datum = TO_CHAR(historie_datum_zeit, 'DD.MM.YYYY "/" HH24:MI" Uhr"');
              TO_DATE($datum, 'DD.MM.YYYY "/" HH24:MI" Uhr"');

              Bekomme dann folgende Fehlermeldung:
              Can't mix placeholder styles (?/:1) at /opt/perl5/lib/site_perl/5.005/PA-RISC2.0/DBD/Oracle.pm line 293.

              Sprich er kommt mit dem String nicht klar bzw. mit den unterschiedlichen "styles".