Announcement

Collapse
No announcement yet.

Datensätze ermittel mit einer Bestimmten Std.

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

  • Datensätze ermittel mit einer Bestimmten Std.

    Hi,

    ich habe ein Problem ich möchte aus einer Tabelle alle Datensätze auslesen die von 01:00:00 Uhr bis 08:00:00 oder halt von 14 Uhr bis 15 Uhr erstellt worden sind.

    z.B. von deinem Tag ist das ja kein problem aber ich möchte halt alle Datensätze mit der erstelltzeit egal an welchem Datum.

    Ich nehme an das Problem liegt an dem Datum was noch als wert dabei steht in der Spalte "ERSTELLZEITPUNKT"
    Gibt es eine möglichkeit eine art Wildcart oder so für das Datum zu benutzen?

    So habe ich es versucht bekomme aber immer 0 als wert obwohl ich sicher bin das Datensätze vorhanden sind.

    Code:
    SELECT count(ERSTELLZEITPUNKT)
    FROM Logeintraege
    where ERSTELLZEITPUNKT between to_date('01:00:00', 'HH24:mi:ss')
    and to_date('08:00:00', 'HH24:mi:ss')
    Der wert sieht so aus von "Erstellzeitpunkt" 20.04.2007 12:14:21 usw.

    Gruß
    Wodan

  • #2
    Hi,

    Du musst vom Erstellzeitpunkt das Datum abziehen etwa so:

    SELECT count(ERSTELLZEITPUNKT)
    FROM Logeintraege
    where ERSTELLZEITPUNKT-trunc(ERSTELLZEITPUNKT)
    between to_date('01:00:00', 'HH24:mi:ss')
    and to_date('08:00:00', 'HH24:mi:ss')

    (ungetestet ohne Garantie)

    Gruß
    docendo discimus

    Comment


    • #3
      Hmm da meckert er bei mir über "between" mit ORA-00932: nicht übereinstimmende Datentypen

      Comment


      • #4
        Hi,

        wahrscheinlich musst Du in Dein to_date noch das 'dd.mm.yyyy'
        mit reinnehmen. Aber dann wundert mich, dass der Fehler nicht schon vorher kam. Poste das doch mal im ORACLE-Thread.
        docendo discimus

        Comment


        • #5
          Ich würde versuchen die Zeit aus dem Wert zu extrahieren

          Comment


          • #6
            Ich habe zwar kaum (keine) Ahnung von Oracle, aber im allgemeinen gilt: Gleich und Gleich läßt sich gut vergleichen; also wie wäre es damit:

            [highlight=SQL]SELECT count(ERSTELLZEITPUNKT)
            FROM Logeintraege
            where to_date(ERSTELLZEITPUNKT, 'HH24:mi:ss')
            between to_date('01:00:00', 'HH24:mi:ss')
            and to_date('08:00:00', 'HH24:mi:ss')[/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hallo,

              die Oracle-Funktion TO_DATE liefert immer einen kompletten DateTime-Wert. Evtl. bei der Angabe fehlende Datumswerte werden durch die aktuellen Systemwerte ersetzt.
              ein TO_DATE('01:00:00', 'HH24:mi:ss') liefert also am heutigen Tag ein '04.07.2008 01:00:00' und Morgen eben '05.07.2008 01:00:00'. Aus diesem Grund muß man die zu vergleichenden Werte einheitlich normieren. Die Lösung von O. Helper ist also der richtige Ansatz. Allerdings fehlt hier eine explizite Konvertierung von ERSTELLZEITPUNKT in einen String. Die implizite Umwandlung durch den Server würde hier mit Sicherheit Probleme machen.
              [highlight=sql]
              SELECT count(ERSTELLZEITPUNKT)
              FROM Logeintraege
              WHERE to_date(to_char(ERSTELLZEITPUNKT, 'HH24:MI:SS'), 'HH24:MI:SS')
              BETWEEN to_date('01:00:00', 'HH24:MI:SS')
              AND to_date('08:00:00', 'HH24:MI:SS')
              [/highlight]

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Warum nicht einfach so?
                Oder mache ich einen Denkfehler?

                to_number(to_char(DateFeld,'hh') ) between 1 and 8

                Comment


                • #9
                  uminky - einen 'kleinen' Denkfehler hast Du.
                  Je nach lokalen Einstellungen kann 'hh' falsch interpretiert werden. Es sollte 'hh24' genommen werden.
                  Und dann kommte es noch darauf an ob zwischen 1 und 8 bedeutet von 1:00:00 - 7:59:59, oder von 1:00:00 - 8:00:00.
                  Ich würde daher folgende Prüfung vorschlagen:
                  -- für 1:00:00 - 7:59:59
                  WHERE TO_DATE(TO_CHAR(erstellzeitpunkt, 'HH24:MI:SS')) > TO_DATE('01:00:00', 'HH24:MI:SS')
                  AND TO_DATE(TO_CHAR(erstellzeitpunkt, 'HH24:MI:SS')) < TO_DATE('08:00:00', 'HH24:MI:SS')
                  oder
                  -- für 1:00:00 - 8:00:00
                  WHERE TO_DATE(TO_CHAR(erstellzeitpunkt, 'HH24:MI:SS')) > TO_DATE('01:00:00', 'HH24:MI:SS')
                  AND TO_DATE(TO_CHAR(erstellzeitpunkt, 'HH24:MI:SS')) <= TO_DATE('08:00:00', 'HH24:MI:SS')

                  Gruß Albernd
                  Zuletzt editiert von albernd; 04.07.2008, 17:15.

                  Comment


                  • #10
                    Originally posted by uminky View Post
                    ...Oder mache ich einen Denkfehler?
                    Ja, denn du würdest auch alle DS bekommen, die zwischen 08:00 Uhr und 08:59 Uhr auflaufen.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X