RFZ: Zeit auf 15min Intervalle runden (oracle)

Hallo zusammen,
ich würde gerne immer einen Zeitpunkt 15min in der Zukunft berechnen, der aber auf feste 15min Intervalle (:00, :15, :30, :45) gerundet ist.

Rein mathematisch ist das kein Problem und wäre so umgesetzt:

SELECT ROUND(SYSDATE*96)/96 + 1/96 FROM DUAL;

Praktisch klappt das aber wegen der unterschiedlichen Typen nicht und ich weiss nicht, wie ich hier korrekt umwandeln muss.

Könnt ihr mir helfen?

  1. Tach!

    ich würde gerne immer einen Zeitpunkt 15min in der Zukunft berechnen, der aber auf feste 15min Intervalle (:00, :15, :30, :45) gerundet ist.
    Rein mathematisch ist das kein Problem und wäre so umgesetzt:
    SELECT ROUND(SYSDATE*96)/96 + 1/96 FROM DUAL;

    Für welches DBMS suchst du denn die Lösung? Ist SYSDATE eine Konstante oder wie in MySQL eine Funktion und braucht Klammern() dahinter? Liefert SYSDATE den geforderten Wert oder einen Datumsstring, wie in MySQL, der durch die Multiplikation lediglich von '2012-11-20 09:33:42' zur Zahl 20121120093342 wird? Was hat die Zahl 96 für eine Bedeutung?

    Praktisch klappt das aber wegen der unterschiedlichen Typen nicht und ich weiss nicht, wie ich hier korrekt umwandeln muss.

    Zunächst musst du dir überlagen und das durch Einzelabfragen vielleicht auch noch bestätigen lassen, was du da konkret für Werte bekommst, welchen Typ du für die Rechnung brauchst und dann eine Tyecast- oder eine andere geeignete Funktion suchen. Datums- und Zeit-Funktionen gibt es üblicherweise in den DBMSen eine Menge. Und sei es nur eine, die dir einen Teil des Datums liefert. Sekunden brauchst du ja in der Rechnung beispielsweise nicht.

    dedlfix.

    1. Tach!

      ich würde gerne immer einen Zeitpunkt 15min in der Zukunft berechnen, der aber auf feste 15min Intervalle (:00, :15, :30, :45) gerundet ist.
      Rein mathematisch ist das kein Problem und wäre so umgesetzt:
      SELECT ROUND(SYSDATE*96)/96 + 1/96 FROM DUAL;

      Für welches DBMS suchst du denn die Lösung?

      Ah, im Thread-Titel war der Name Oracle versteckt.

      Ist SYSDATE eine Konstante oder wie in MySQL eine Funktion und braucht Klammern() dahinter?

      Also, es ist (laut Doku) unter Oracle eine Funktion und sie benötigt keine Klammern.

      Liefert SYSDATE den geforderten Wert oder einen Datumsstring, wie in MySQL, der durch die Multiplikation lediglich von '2012-11-20 09:33:42' zur Zahl 20121120093342 wird?

      Per Default muss es wohl nur das Datum als String liefern (27-JAN-11 oder je nach NLS_DATE_FORMAT-Einstellungen). Das heißt also, dass es erst einmal in eine brauchbare Form gebracht werden muss, so dass man damit numerisch rechnen kann.

      Was hat die Zahl 96 für eine Bedeutung?

      Die Frage bleibt. Ergänzt durch: Wie sieht deine Rechnung eigentlich in reinen Zahlen aus, also ohne irgendeine spezielle Syntax?

      dedlfix.

      1. Hallo,

        Was hat die Zahl 96 für eine Bedeutung?

        Die Frage bleibt. Ergänzt durch: Wie sieht deine Rechnung eigentlich in reinen Zahlen aus, also ohne irgendeine spezielle Syntax?

        24h / 15min = 96

        vg ichbinich

        --
        Kleiner Tipp:
        Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
        1. Tach!

          Was hat die Zahl 96 für eine Bedeutung?
          Die Frage bleibt. Ergänzt durch: Wie sieht deine Rechnung eigentlich in reinen Zahlen aus, also ohne irgendeine spezielle Syntax?
          24h / 15min = 96

          Also muss für die Rechnung das Datum als Anzahl von Minuten vorliegen (von welcher Basis aus gesehen auch immer). Die nächste Teilaufgabe heißt demzufolge: Wie kommt man von einem Datumswert zu dieser Minutenanzahl? Da ich Oracle nicht weiter kenne, passe ich an dieser Stelle und zeige mal grob in Richtung Dokumentation zur Beschreibung der Datums- und Zeit-Funktionen.

          dedlfix.

  2. Hallo Fruchtzwerg,
    sag mal, ist das nicht dasselbe Problem wie am 29.10.? Doofes Drängel-Doppelposting!?! Irgendwie sogar der identische Wortlaut?

    Erzeuge einen Startwert, erzeuge eine angemessen grosse temporäre Datenmenge (Tally Table), z.b. durch einen Cross Join. Jeder Datensatz ist quasi +1 Inkrement in 15 min. D.h. der dritte Datensatz ergibt dann Startwert + 3 x 15min. Oracle kennt mit Sicherheit auch Funktionen wie DateAdd etc. Oder ggf implizite Konvertierung zwischen Floatwerten und Datumswerten. Für die Inkrement Nr hilft ggf ROWNUM oder ROW_NUMBER() OVER().

    Wenn du nicht weisst, wie Typumwandlung in Oracle gemacht wird, dann sollte das Handbuch helfen bzw. Google.

    Wie soll denn das Endergebnis dann mal aussehen?

    Ciao, Frank