Maresa P.: Datumsvergleich mit SQL

Hallo,

ich möchte in einer SQL Query folgendes abfragen:

SELECT * FROM tabelle WHERE datum > 2004-10-10

Die Spalte Datum ist vom Typ date.

Leider funktioniert die Query aber nicht richtig. Ich bekomme grundsätzlich immer alle Datensätze angezeigt, egal ob das hinterlegte Datum größer oder kleiner als 2004-10-10 ist.

Frage: Lautet die Syntax für einen Datumsvergleich in SQL anders?
Wenn ja, wie?

Vielen Dank für Euere Hilfe
Maresa

  1. Hi,

    SELECT * FROM tabelle WHERE datum > 2004-10-10
    Die Spalte Datum ist vom Typ date.

    1984 (also 2004 minus 10 minus 10) ist es aber nicht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Hallo Cheatah,

      SELECT * FROM tabelle WHERE datum > 2004-10-10
      Die Spalte Datum ist vom Typ date.

      1984 (also 2004 minus 10 minus 10) ist es aber nicht.

      Ja, daran hab ich auch schon gedacht und die Query folgenden abgeändert:

      SELECT * FROM tabelle WHERE datum > '2004-10-10'

      Dann werden aber überhaupt keine Datensätze ausgegeben, obwohl entsprechend gültige vorhanden sind.

      Cheatah

      lg

      Maresa

      1. Hi,

        SELECT * FROM tabelle WHERE datum > '2004-10-10'

        '2004-10-10' ist ebenfalls kein Datum, sondern ein String.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. hi,

          SELECT * FROM tabelle WHERE datum > '2004-10-10'

          '2004-10-10' ist ebenfalls kein Datum,

          wieso nicht?

          sondern ein String.

          ja, das vielleicht außerdem.

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
          1. Hi,

            '2004-10-10' ist ebenfalls kein Datum,
            wieso nicht?

            weil es bisher nicht in ein solches umgewandelt wurde.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. hi,

              '2004-10-10' ist ebenfalls kein Datum,
              wieso nicht?

              weil es bisher nicht in ein solches umgewandelt wurde.

              geht's auch ausnahmsweise mal im klartext?

              eine query der genannten art _funktioniert_ mit mysql auf jeden fall (sofern passende DS vorhanden).

              also, ist das rumphilosophirerei deinerseits, oder ernsthafte technische bedenken? ;-)

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      2. hi,

        SELECT * FROM tabelle WHERE datum > '2004-10-10'

        funktioniert bei mir problemlos.

        Dann werden aber überhaupt keine Datensätze ausgegeben, obwohl entsprechend gültige vorhanden sind.

        sicher?
        wirklich sicher?
        ganz ganz sicher?

        dann muss der fehler noch irgendwo anders liegen ...

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. hi,

          hi

          sicher?
          wirklich sicher?
          ganz ganz sicher?

          dann muss der fehler noch irgendwo anders liegen ...

          du hast recht! der fehler lag woanders und nun funktioniert alles.

          gruß,
          wahsaga

          besten dank
          maresa

    2. Hi,

      SELECT * FROM tabelle WHERE datum > 2004-10-10
      Die Spalte Datum ist vom Typ date.
      1984 (also 2004 minus 10 minus 10) ist es aber nicht.

      Mit vielen Grüßen von George Orwells großem Bruder  ;-)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hi,

    wenn ich ein SQL DBMS wäre würde ich 2004-10-10 zu 1984 evaluieren,
    dein gesamtes SQL würde dann theoretisch lauten

    SELECT * FROM tabelle WHERE datum > 1984

    Und das scheint bei allen deinen Datensätzen der Fall zu sein.
    Wenn dein DBMS Datumse _intern_ als integer für jede Sekunde
    ab dem 1.1.1900 00:00:00 abspeichert und in Abfragen die
    Konvertierung implizit vornimmt, dann kommst du mit 1984 Einheiten
    nicht sehr weit.

    Du solltest dir mal in der Hilfe die richtige Syntax für Datumsabfragen
    suchen.

    Ciao && Gruß, Frank

    1. Hi,

      Wenn dein DBMS Datumse [...]

      JIIIAAAAAAARGHHHH!!!!!3 :-)

      Der Plural von Datum lautet Daten. Ja, genau, und der Singular von Daten ist Datum - egal welche Bedeutung man den Begriffen sonst noch zuordnen mag.

      Sorry, aber das musste mal gesagt werden :-)

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. hoi!

        genau deswegen hab ich "Datumse" benutzt :-)
        Gut dass es jetzt (in ein paar Tagen) im Archiv manifestiert wird.

        Ciao, Frank

    2. Hi,

      Hallo Frank,

      wenn ich ein SQL DBMS wäre würde ich 2004-10-10 zu 1984 evaluieren,
      dein gesamtes SQL würde dann theoretisch lauten

      SELECT * FROM tabelle WHERE datum > 1984

      Und das scheint bei allen deinen Datensätzen der Fall zu sein.
      Wenn dein DBMS Datumse _intern_ als integer für jede Sekunde
      ab dem 1.1.1900 00:00:00 abspeichert und in Abfragen die
      Konvertierung implizit vornimmt, dann kommst du mit 1984 Einheiten
      nicht sehr weit.

      Du solltest dir mal in der Hilfe die richtige Syntax für Datumsabfragen

      Ich habe mir bereits http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html
      durchgelesen. Bin aber nicht auf den richtigen Weg gekommen. Kannst Du mir einen Tipp geben?!

      Viele Dank
      Maresa

  3. Hi,

    ich kenn den MS SQL Server aber das sollte gleich funktionieren (wenn ms sich an die rules hält!)

    versuch mal
    select * from tblX where datum >= '1.1.2004'

    evtl. musst du auf english language anpassen:
    select * from tblX where datum >= '1.1.2004'

    oder
    select * from tblY where datum between '1.1.2004 00:00' and '1.1.2004 23:59'

    ja sieht blöd aus, aber das muss man bei datetime glaub ich, bei smalldatetime nicht.

    oder:
    select * from tblX where year(datum) = 2004 and month(datum) = 1 and day(datum) = 1

    das hier sind aber zahlen. du musst unterscheiden zw. zahl und string.

    datum ist string
    tag, monat und jahr sind zahlen

    mfg hoffe ich konnte helfen

    Kadir