1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Select Times of Day in 5 Minutes Interval

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Kampfgummibaerlie, 7 September 2018.

  1. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Mein anliegen wäre jetzt, wo ich nach einer gewissen Zeit Unterbrechung aus gesundheitlichen und emotionalen Gründen, bin ich einmal wieder zurück.

    Kann man bei PGSQL (kann man sicher) alle Uhrzeiten (eben im 5 Minuten Takt) selecten?

    Bin zurzeit bei PHP, hätte nur gerne eine Abfrage, die alle Uhrzeiten selected, und dann mittels einer where-klausel eingeschränkt wird, damit ich alle möglichen Uhrzeiten in der Öffnungszeit in einer Dropdownliste anzeigen könnte.

    Für die SQL-Leute hier übersetzt :D :
    Ich hätte gerne eine Abfrage, die mir alle möglichen Uhrzeiten (von 00:00 bis 23:55) selected, und dann am Ende mittels einem Where eben die Uhrzeiten auf die während der Öffnungszeiten einschränkt.

    Danke ;)

    PS: Werde wohl niewieder vom Programmieren wegkommen :D (hoffe ich ^^)

    EDIT: Wäre gerne nochmals über Loops genauer unterrichtet, am besten mit ein wenig Praxis-Übungen ^^
     
  2. castorp

    castorp Datenbank-Guru

    Du meinst sowas?

    Code:
    select time '00:00' + i * interval '1' minute
    from generate_series(0, (24 * 60) - 5, 5) i
    
    Online Beispiel: Öffnungszeiten, PostgreSQL - rextester

    Wenn Du das öfter brauchst, ist aber sinnvoller eine Tabelle mit den Werten anzulegen.
     
    Walter gefällt das.
  3. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Ja, sowas in die Richtung, habe ich glaube ich gestern schonmal ähnlich im Internet gefunden, aber ich habe das Problem, dass er die Spalte nicht erkennt, obwohl ich sie genauso benenne, und damit nicht in der Where Klausel einsetzen kann.

    Beispiel:
    Code:
    select time '00:00' + i * interval '5' minute as time
    from generate_series(0, (24 * 60) - 5) i, öffnungszeiten where time >= '08:00'::time
    
    Error:
    column "time" does not exist
     
  4. castorp

    castorp Datenbank-Guru

    Du kannst einen Spaltenalias nicht auf der gleichen Ebene im WHERE verwenden.

    Du musst das in eine sog. derived table verpacken:

    Code:
    select *
    from (
      select time '00:00' + i * interval '1' minute as time
      from generate_series(0, (24 * 60) - 5, 5) i
    ) t
    where time >= '08:00'::time;
     
  5. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Danke, funktioniert jetzt einwandfrei ;)

    nachdem es mich interessiert, und womöglich auch andere:
    Kannst du eine Erklärung zu den einzelnen Schritten deiner Querry geben?
     
  6. castorp

    castorp Datenbank-Guru

    generate_series(0, (24 * 60) - 5, 5) generiert Zahlen in fünfer Schritten zwischen 0 und (24 * 60). 24 * 60 ist die Anzahl der Minuten in einem Tag. Nachdem der letzte Wert 23:55 sein soll, werden davon noch fünf Minuten abgezogen.

    Das Resultat davon ist also sowas in der Art:
    Code:
    i   
    ----
       0
       5
      10
    ....
    1435
    Das sind sozusagen die Minuten nach Mitternacht die für jede Uhrzeit relevant sind. Der Zahlenwert i wird durch das Multiplizieren mit einem Intervall der Länge "1 Minute" zu einem Intervall der Länge "i Minuten" und dieses Intervall wird dann auf den festen Startwert "Mitternacht" (time '00:00') addiert.



     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden