Announcement

Collapse
No announcement yet.

Typumwandlung für SQL-Abfrage

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

  • Typumwandlung für SQL-Abfrage

    Hallo!
    Ich habe eine Paradox-Tabelle und möchte mit Hilfe von LokalSQL darauf zugreifen.
    Ich habe zwei Tabellenspalten. Eine enthält ein Datum eine andere die Uhrzeit. Ich benötige jedoch ein Datenfeld, daß sowohl Datum als auch
    den Zeitpunkt enthält (also ein Feld vom Typ TimeStamp).
    Wie muß ich meine SQL-Abfrage formulieren, damit ich aus den beiden Feldern
    Datum und Uhrzeit ein Feld vom Typ TimeStamp bilden kann.
    Bislang habe ich zuerst die Felder in Texte gewandelt dann zusammengeführt
    und anschließend in das Format TimeStamp gebracht.
    Das Ergebnis war aber nicht gerade toll.
    Vielleicht kann mir bei der Formulierung der Abfrage helfen.
    Schon einmal Danke!
    mfg Thomas

  • #2
    Hallo,

    wo liegt das Problem? Ich habe in einer Paradox-Tabelle die folgenden Spalten angelegt: <br>
    - Datum ist vom Typ <b>Datum</b> <br>
    - Zeit ist vom Typ <b>Zeit</b> <br>
    - DatumZeit ist vom Typ <b>@</b> (Datum/Zeit)<br>
    Somit reicht eine einfache SQL-Abfrage aus, um einen TimeStamp-Wert zurückzuliefern:
    <pre>
    SELECT Datum, Zeit, DatumZeit FROM Test
    </pre>
    Wenn diese zusätzliche Spalte in der Tabelle nicht in Frage kommt, würde ich ein <i>berechnetes Feld</i> (TField-Instanz) für diese Abfrage hinzufügen, um den TimeStamp-Wert im Programm zu berechnen.

    Alternativ kann man die Zeichenkette in SQL zusammen bauen lassen:
    <pre>
    SELECT Datum, Zeit,
    CAST(Datum AS CHARACTER(16)) || ' ' || CAST(Zeit AS CHARACTER(16))
    FROM Test
    </pre>
    Oder das Ergebnis in einen TIMESTAMP umwandeln:
    <pre>
    SELECT Datum, Zeit,
    CAST(CAST(Datum AS CHARACTER(16)) || ' ' || CAST(Zeit AS CHARACTER(16)) AS TIMESTAMP)
    FROM Test
    </pre&gt

    Comment


    • #3
      Hallo!

      Danke für den Hinweis. ABER hier lag noch nicht mein Problem.
      Erst wenn ich Versuche die Abfrage um eine WHERE-Klausel zu
      erweitern, in der ich auf die TimeStamp-Konstruktion zugreife,
      erhalte ich einen Fehler.

      select cast(cast (t.Datum as char(16)) || " " || cast(t.Uhrzeit as char(16)) as TimeStamp) as DatumZeit
      from "Messdaten.db" t
      where (DatumZeit > '08.01.00 14:00:00')

      Ist eine derartige Abfrage nicht möglich?

      Muß ich etwa eine aufwendige WHERE-Klausel anlegen, in der ich einzelnt auf Datum und Uhrzeit zugreife?

      mfg Thomas

      P.S.: Eine Änderung der Tabelle ist nicht möglich

      Comment


      • #4
        Hallo,

        in meiner Beispiel-Paradoxtabelle mit den drei angelegten Testdatensätzen funktioniert die folgende Abfrage:
        <pre>
        SELECT Datum, Zeit,
        CAST(CAST(Datum AS CHARACTER(16)) || ' ' || CAST(Zeit AS CHARACTER(16)) AS TIMESTAMP) AS x
        FROM Test
        WHERE CAST(CAST(Datum AS CHARACTER(16)) || ' ' || CAST(Zeit AS CHARACTER(16)) AS TIMESTAMP) > '18.07.2000 10:00:00'
        </pre>
        Während LOCAL SQL zum Beispiel ein ORDER BY x DESC anstandslos ausführt, ist WHERE kritischer und kann erst dann zur Mitarbeit bewegt werden, wenn der komplette CAST-Block wiederholt wird

        Comment


        • #5
          Hallo!

          Jetzt läuft's! Danke!
          Daran die Komplette Cast-Anweisung in die Where-Klausel einzubauen
          hatte ich nicht gedacht.

          mfg Thoma

          Comment

          Working...
          X