andi123: Mustervergleich bei MS SQL7.0

Hallo,

laut SQL-Doku sollte man mit LIKE auch DATETIME-Spalten durchsuchen koennen.
Versuche ich z.B. folgendes Statement
select * from tabelle1 where datum like '%13%'
kommen alle Tabelleneintraege, wo im Datum eine 13 auftaucht.
Auch wenn ich folgende Abfrage mache, erhalte ich korrekt alle Eintraege des Monats Juni:
select * from tabelle1 where datum like '%Jun%'

Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
select * from tabelle1 where datum like '2002-06-13%'

Kann mir jemand sagen, wie es geht?

Danke Andi

  1. Versuche es mal mit

    select * from tabelle1 where datum = '2002-06-13%'

    Trotz der Zeit im DateTime sollte ein Vergleich von links nach rechts stattfinden, so dass er nach der letzten Datumsstelle aufhören sollte mit dem Vergleich.

    1. select * from tabelle1 where datum = '2002-06-13%'
      Trotz der Zeit im DateTime sollte ein Vergleich von links nach rechts stattfinden, so dass er nach der letzten Datumsstelle aufhören sollte mit dem Vergleich.

      Das kann nicht gehen, da man keine Platzhalter verwenden kann, wenn man den Vergleich mit '=' statt mit LIKE macht.

      Andi

  2. Hallo Andi,

    wenn Du gezielt nach einem Datum suchst und den Wert in einem Lietral in Dein Statement einbaust, dann muß Du die Formatierung verwenden, die am Server eingestellt ist. Schau mal nach, ob die Deiner angegebenen entspricht. Falls Du die Möglichkeit zur Verwendung von Bindvariablen hast solltest Du diese verwenden. Das ist hinsichtlich der Formatierung unproblematischer.

    HTH

    Gruß Frank

  3. Hallo Andi,

    laut SQL-Doku sollte man mit LIKE auch DATETIME-Spalten durchsuchen koennen.
    Versuche ich z.B. folgendes Statement
    select * from tabelle1 where datum like '%13%'
    kommen alle Tabelleneintraege, wo im Datum eine 13 auftaucht.
    Auch wenn ich folgende Abfrage mache, erhalte ich korrekt alle Eintraege des Monats Juni:
    select * from tabelle1 where datum like '%Jun%'

    Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
    select * from tabelle1 where datum like '2002-06-13%'

    nach meiner Literatur werden die Datentypen Datetime und Smalldatetime intern als Referenzzahl gespeichert, Der Datumsanteil seit dem 01.01.1900 als Tagesnummer (1,5Byte) und die Zeit als Sekunden seit Mitternacht (2,5 byte) bzw Minuten bei Smalldatetime (1,5 Byte). Diese merkwürdige Datumsdarstellung stammt wohl noch aus der Zeit, als Speicherplatz knapp war und man mit HighNibble und LowNibble gearbeitet hat (DOS 2.0 FAT 12).

    Die Auflösung findet erst beim Ansprechen des Feldes statt. Da rechnet der Server dann alle möglichen Schablonen aus und vergleicht die von Dir übergebene damit. Demnach müßte man also auch vorne ein % setzen.

    Es müßte also keine Jahreszahl gt 5995 möglich sein.

    Probiers mal aus.

    Tom

    1. Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
      select * from tabelle1 where datum like '2002-06-13%'

      die von Dir übergebene damit. Demnach müßte man also auch vorne ein % setzen.
      Hm, danke erst mal fuer die Antwort, aber auch dies geht nicht.
      Es werden einfach 0 Reihen zurueckgeliefert.
      Wenn ich mir das Datumsfeld anschaue so hat das in der Ausgabe folgendes Format:
      2002-06-13 00:00:32.000

      Es ist auch komisch, da die Abfrage, wie in der Doku beschrieben ist, schon nicht funktioniert.
      Naja, ich werd mir jetzt irgendwas zusammenbasteln mit DATEPART(yearofday,...).
      Ist zwar umstaendlich, aber es soll halt funktionieren :-)

      Danke Andi

      1. Hallo,

        Hm, danke erst mal fuer die Antwort, aber auch dies geht nicht.
        Es werden einfach 0 Reihen zurueckgeliefert.
        Wenn ich mir das Datumsfeld anschaue so hat das in der Ausgabe folgendes Format:
        2002-06-13 00:00:32.000

        Es ist auch komisch, da die Abfrage, wie in der Doku beschrieben ist, schon nicht funktioniert.
        Naja, ich werd mir jetzt irgendwas zusammenbasteln mit DATEPART(yearofday,...).

        alternativ könntest Du die convert()-Funktion benutzen um das Datum in einen String umzuwandeln, der dann das format benutzt, das Du auch bei dem String-Literal benutzt hast.

        Grüße
          Klaus