Holger Lersch: (SQL) Probleme mit ...LIKE '%irgendwas'

Hallo !

Ich habe folgende kleine Tabelle auf einem MS SQL Server :

kunde1    10.10.99    123
kunde1    11.10.99    12
kunde1    12.10.99    45
kunde1    13.10.99    13
kunde1    14.11.99    23
kunde2    12.10.99    45
kunde3    13.10.99    13
kunde2    14.10.99    2

1. Spalte heisst Kundennummer ; Textfeld
2. Spalte heisst Datum ; Datum/Zeit - Feld
3. Spalte heisst Wert1; Integer - Feld

Ich möchte jetzt aus dieser Tabelle zB. alle Werte von kunde1 im Oktober auslesen und habe folgendes SQL Statement, was meiner meinung nach funktionieren sollte, es aber nicht tut <ärger> was habbisch falsch gemacht ?

SELECT * FROM tabelle WHERE Datum LIKE '%10.99' AND Kundennummer ='kunde1'

Thanx und Gruß
Holger

  1. Hallo Holger.

    Dein Problemliegt darain, daß Du Datumsangaben nicht wie einen Text behandeln kannst. Der Datentyp Datum/Uhrzeit ist ein eigenes Format.
    Jede Datenbabnk bietet dafür ein Set von Funktionen an.

    Die genaue Syntax von MS SQL Server kenne ich nicht. Sinngemäß sollte folgendes funktionieren:

    SELECT * FROM tabelle WHERE Monat(Datum) = 10 AND Kundennummer ='kunde1'

    Falls Du mehrere Jahre in der Tabelle hälst, mußt Du noch das Jahr mit abfragen:

    SELECT * FROM tabelle WHERE Monat(Datum) = 10 AND Jahr(Datum) = 1999 AND Kundennummer ='kunde1'

    Gruß
    Kess

    1. Hi Kess !

      SELECT * FROM tabelle WHERE Monat(Datum) = 10 AND Kundennummer ='kunde1'

      Falls Du mehrere Jahre in der Tabelle hälst, mußt Du noch das Jahr mit abfragen:

      SELECT * FROM tabelle WHERE Monat(Datum) = 10 AND Jahr(Datum) = 1999 AND Kundennummer ='kunde1'

      BINGO ! Das war's 1000Dank !

      Um für interressierte die MS-SQL Syntax nachzureichen :

      SELECT * FROM tabelle WHERE month(Datum) = 10 AND year(Datum) = 1999 AND Kundennummer ='kunde1'

      so funktionierts !

      Grüße
      Holger

      1. Um für interressierte die MS-SQL Syntax nachzureichen :
        SELECT * FROM tabelle WHERE month(Datum) = 10 AND year(Datum) = 1999 AND Kundennummer ='kunde1'
        so funktionierts !

        Ein schönes Beispiel dafür, wie sehr verschiedene Datenbankserver unterschiedliche Varianten von SQL unterstützen.
        Oracle kennt diese Funktion beispielsweise nicht; dort müßte man mit den Funktionen "to_char" bzw. "to_date" zwischen dem internen Datentyp "date" hin- und herkonvertieren ... dafür gibt es immerhin einen BETWEEN-Operator:
        SELECT * from tabelle where datum between to_date ('1-oct-99') and to_date ('31-oct-99);

        1. dafür gibt es immerhin einen BETWEEN-Operator:

          SELECT * from tabelle where datum between to_date ('1-oct-99') and to_date ('31-oct-99);

          Hi

          das kannste by SQL-Server aber auch in der Form :
          WHERE (myDate >= '10/1/1999' AND myDate <= '10/31/1999')
          haben :)

          gruss
          Jens

  2. Ich möchte jetzt aus dieser Tabelle zB. alle Werte von kunde1 im Oktober auslesen und habe folgendes SQL Statement, was meiner meinung nach funktionieren sollte, es aber nicht tut <ärger> was habbisch falsch gemacht ?

    SELECT * FROM tabelle WHERE Datum LIKE '%10.99' AND Kundennummer ='kunde1'

    Hallo,

    das erste Beispiel funzt wahrscheinlich nur mit Access und MS SQL-Server. Aber da es ja in jeder Sprache irgendwelche Datumsfunktionen gibt, muß man das eigentlich nur ersetzen.
    SELECT * FROM tabelle WHERE Month(Datum) = 10 AND Kundennummer ='kunde1'

    SELECT * FROM tabelle WHERE Datum LIKE '10%' AND Kundennummer ='kunde1'

    Da die DB das Datum zwar 01.10.99 ausgibt, im Normalfall aber intern 10/01/99 speichert, sollte die Abfrage auch auf die ersten beiden Zeichen gehen.

    Aber eigentlich sollte man solche Sachen so überprüfen:

    "SELECT * FROM tabelle WHERE (Datum BETWEEN #" & Datum1 & "# AND #" & Datum 2 & "#) AND Kundennummer ='kunde1'"

    Datum1 und Datum2 stellen den ersten, bzw. letzten Tag des Monats dar.

    Hau mich nicht, wenn die Syntax nicht ganz stimmt.

    Tschau, Stefan