Announcement

Collapse
No announcement yet.

Seltsames Datum !?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Seltsames Datum !?

    Hallo,

    ich habe ein seltsames Problem bei der ermittlung eines Datums.

    Gebe ich folgendes Statement ein:

    select HISTORIE_AM from HPS
    WHERE HISTORIE_AM = to_date('2006-12-05', 'YYYY-MM-DD')

    so lautet das Ergebnis = Null; (obwohl ein Ergebnis geliefert werden müsste!)

    gebe ich nun zur Kontrolle dieses Statement ein:

    select HISTORIE_AM, TO_DATE (HISTORIE_AM,'YYYY-MM-DD'), TO_DATE ('2006-12-05','YYYY-MM-DD') from HPS

    erhalte ich :

    2006-12-05 0005-12-06 2006-12-05


    man baechte den 2. Datensatz!!! Der Tag wird Vierstellig (0005) abgebildet und das Jahr (06) 2stellig!


    Hat da jemand eine Erklärung zu? Denn es gelingt mir nicht auch nur ein vernünftiges Ergebnis zu bekommen.


    Vorab: Danke für Eure Hilfe

  • #2
    Hi,

    Du vermischt hier Formatierung und Konvertierung. TO_DATE konvertiert einen String in ein Datum. Es macht keinen Sinn auf ein DATE Feld to_date loszulassen. Hier übergibst Du nämlich das interne 7 byte Binärfeld an die to_date Funktion, sagst dann wie dieser Wert in ein Datum umgewandelt werden soll und anschließend wird für die Ausgabe noch eine implizite Formatierung vorgenommen. Das hier nichts gescheites rauskommen kann ist klar.

    Wenn Du ein datum explizit für die Ausgabe formatieren möchtest, dann verwendest Du TO_CHAR

    Wegen deiner WHERE Bedingung: In einem DATE ist auch ein Zeitanteil vorhanden. Dieser wird, sofern nicht angegeben, auf 00:00 gesetzt. Und falls dieser Zeitanteil in deiner Tabelle einen anderen Wert besitzt, liefert die Bedingung keine Treffer.

    Du kannst also entweder die Uhrzeit mit angeben, eine BETWEEN Bedingung daraus machen - also von 00:00:00 bis 23:59:59 oder Du verwendest die Funktion TRUNC um den Zeitanteil auf 0 zu setzen:
    Code:
    select to_char(TRUNC(sysdate),'YYYY-MM-DD HH24:MI:SS') a from dual;
    In Deinem Fall dann
    Code:
    WHERE TRUNC(HISTORIE_AM) =  to_date('2006-12-05', 'YYYY-MM-DD')
    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      @Dimitri

      und wieder was gelernt!

      Mille Grazie!

      Comment

      Working...
      X