Announcement

Collapse
No announcement yet.

Suche nach TimeStamp-Feld

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

  • Suche nach TimeStamp-Feld

    Hallo beisammen,

    in einer SQL-Datenbank habe ich ein TimeStamp-Feld "Termin". Nun will ich alle Einträge eines bestimmten Tages selektieren.

    <PRE>
    SELECT * FROM projekte WHERE termin = '01.06.2003'
    </PRE>

    liefert keine Daten zurück, vermutlich weil die Zeitangabe fehlt.

    <PRE>
    SELECT * FROM projekte WHERE termin > '01.06.2003'
    </PRE>

    hingegen funktioniert.

    Wie schaffe ich es, eine SQL-Abfrage zu formulieren, die mir alle Termine eines bestimmten Tages liefert?

    <PRE>
    with qyDpoTag do
    begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM projekte');
    SQL.Add('WHERE termin = :SuchTag');
    ParamByName('SuchTag').AsDateTime := XXX
    Open;
    end;
    </PRE>

    Ralph

  • #2
    versuche mal

    select * from Projekte Where Termin like '01.06.200

    Comment


    • #3
      Hallo,

      je nach verwendeter SQL-Datenbank unterscheidet sich die Vorgehensweise. Im Fall des MS SQL Server (7/2000) stehen zum Beispiel die Funktionen <b>DATEPART</b> und <b>CONVERT</b> zur Verfügung. Das folgende Beispiel demonstriert dies - dort "tausche" ich den Datumswert gegen eine 11 Zeichen breite CHAR-Spalte um, wobei das Format 104 die deutsche Datumsdarstellung mit 4-stelligen Jahreszahlen anfordert.

      <pre>

      SELECT CONVERT(char(11), datum, 104) AS Datum, COUNT(*) AS Anzahl
      FROM dttest
      GROUP BY CONVERT(char(11), datum, 104)

      </pre&gt

      Comment


      • #4
        Raik,

        danke für die Antwort - aber auch mit dem Operator LIKE werden keine Daten selektiert

        Comment


        • #5
          Hallo Herr Kosch,

          die Idee war gut:

          Wenn ich mittels DecodeDate das Suchdatum in seine Bestandteile zerlege und diese über folgende SQL-Abfrage verwende, klappt es:

          <PRE>
          DecodeDate(FDatum, SuchJahr, SuchMonat, SuchTag);

          with qyDpoTag do
          begin
          Close;
          SQL.Clear;
          SQL.Add('SELECT * FROM projekte');
          SQL.Add('WHERE EXTRACT(year FROM PlanVon) = :Jahr');
          SQL.Add('AND EXTRACT(month FROM PlanVon) = :Monat');
          SQL.Add('AND EXTRACT(day FROM PlanVon) = :Tag');
          SQL.Add('ORDER BY PlanVon;');
          ParamByName('Jahr').AsFloat := SuchJahr;
          ParamByName('Monat').AsFloat := SuchMonat;
          ParamByName('Tag').AsFloat := SuchTag;
          Open;
          end;
          </PRE>

          Mit freundlichen Grüßen

          Ralph Staudt

          Comment


          • #6
            Hallo Ralph,

            <pre>
            select * FROM projekte
            WHERE termin >= :SuchTag and
            termin <= :SuchTag + 1
            </pre>

            Falls Suchtag + 1 vom SQL-Server nicht unterstützt wird nimm einen zweiten Parameter.

            Dem Parameter würde ich über AsDate das datum zuweisen. In diesem fall wird kein Zeitanteil mit übergeben.

            Tschüß

            Torste

            Comment


            • #7
              Torsten,

              das war auch meine erste Idee, die jedoch nicht funktioniert hat... da es nun aber wie gewünscht spielt, lasse ich es jetzt auch so.

              Trotzdem vielen Dank und viele Grüße

              Ralp

              Comment


              • #8
                <PRE>
                select * FROM projekte
                WHERE termin >= :SuchTag and
                termin <= :SuchTag + 1
                </PRE>
                Wenn, dann schon termin<:Suchtag+

                Comment

                Working...
                X