tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
460
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    slowfly slowfly ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    40
    Hallo zusammen

    Ich habe hier die Anforderung, Datensätze mit einem Datumsrange abzufragen.
    Also zum Beispiel: Gib mir alle Datensätze vom 01.01.2012 12:00 bis zum 02.01.2012 12:00.

    Das Problem ist jetzt, dass die Tabelle das Datum in zwei Feldern speichert, nämlich createDate und createTime (also z.B. '2012-01-01' und '12:00:00')

    Jetzt habe ich natürlich das Problem, wenn ich
    createTime >= '12:00:00' and
    createTime <= '12:00:00' and
    createDate >= '2012-01-01' and
    createDate <= '2012-01-02'
    abfrage, dass nur die Datensätze zurückkommen, die um 12:00:00 angelegt wurden.

    Ich bin jetzt hingegangen und habe das ganze "zusammengecastet" (IBM DB2 Dialect):
    CONCAT(cast(createDate as VARCHAR(10)), cast(createTime as VARCHAR(8))) >= ?
    Den Wert schnippsle ich mir dann in der Applikation, welche die Abfrage startet, zusammen; also quasi
    eingegebenesDatum.parse(dd.MM.yyyyHH:mm:ss)

    Zusätzlich habe ich trotzdem noch den createDate abgefragt, gefühlt ist's dann ein bisschen schneller.

    Ich könnte mir höchstens noch vorstellen, dass ich das ganze in einen UTC-Long caste, anstatt in einen VARCHAR, damit das Casten und vergleichen schneller geht, aber bevor ich da noch mehr herumbastle, würde ich doch gern wissen, ob ich nicht komplett auf dem Holzweg bin? Ich kann mir vorstellen, dass es eine elegantere Lösung gibt, was meint ihr?

    Besten Dank und Gruss
    slowy
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Annahme: DB ist MySQL


    Du kannst sie mit TIMESTAMP() zusammensetzen

    Code sql:
    1
    2
    
    WHERE
        TIMESTAMP(createDate, createTime) BETWEEN TIMESTAMP('2012-01-01 12:00:00') AND TIMESTAMP('2012-01-02 12:00:00')
    slowfly bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    slowfly slowfly ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    40
    Besten Dank, Yaslaw.

    Funktioniert auch unter DB2.

    Danke für die schnelle Antwort
    slowy
     

Ähnliche Themen

  1. SQL/Oracle date/time -> suche Date
    Von Goldman im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 20.05.09, 15:28
  2. [MS ACCESS] Abfrage leere Datums-Felder
    Von soyo im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 12.12.07, 09:22
  3. MySQL-Abfrage über zwei Tabellen und zwei Zeilen
    Von bnc-bang im Forum Relationale Datenbanksysteme
    Antworten: 7
    Letzter Beitrag: 13.04.07, 20:43
  4. Antworten: 3
    Letzter Beitrag: 12.04.07, 18:19
  5. Antworten: 3
    Letzter Beitrag: 19.09.04, 14:48

Stichworte