nach Monat suchen...

hallo,
checkbox 9 ist für RE und checkbox10 ist für kv´s. Spalte Datum seiht z.B. so aus 2016.05.02
Mein Ziel ist es jetzt:

... AND zeige mir alle Ergnisse mit 05 (Mai) an.

Wie hänge ich das an dem String das an?

      string sucher_r = "";
            string sucher_a = "";
            if (checkBox9.Checked)
            {
                sucher_r = " AND artdesaufttrags = 'Rechnung'";
            }
            if (checkBox10.Checked)
            {
                sucher_a = " AND artdesaufttrags = 'Angebot'";
            }

            if (checkBox10.Checked && checkBox9.Checked )
            {
                sucher_a = " AND (artdesaufttrags = 'Angebot' OR artdesaufttrags = 'Rechnung')";
                sucher_r = "";
            }
            try
            {

                string connstring = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};",
                  Form1.tbHost, Form1.tbPort, Form1.tbUser, Form1.tbPass, Form1.tbDataBaseName);

                NpgsqlConnection conn = new NpgsqlConnection(connstring);

                conn.Open();

                string sql = "select * from auftrag where (sqlpos BETWEEN ' 1 'AND ' 100')" + sucher_a + sucher_r +";";

Keine Ahnung was Du da tust und treibst, aber es gibt Funktionen, um aus einem Datum Dinge zu extrahieren.Vermutlich suchst Du sowas. Verwende halt korrekte Datentypen, das machst Du ja offenbar derzeit nicht.

Dein gezeigter Code hat nix mit SQL zu tun, damit bist Du hier eher falsch.

select *
from auftrag
where extract(month from bestell_datum) = 5

2 Ergänzungen dazu:

  • das liefert alle Mai-Ereignisse, unabhängig von Jahr. Das kann gewollt sein, kann aber auch ein Fehler sein
  • ein funktionaler Index kann die Performance solcher Abfragen erheblich beschleunigen

ZU.1: ja,das war Absicht, ich hätte nach dem Jahr Tag Stunden fragen können, aber dann verstehen mich die Leute nicht. Sie schreiben dann…Keine Ahnung was Du da tust und treibst… :slight_smile:

zu.2 Das kann gut sein, ich gehe erst den einfachen Weg, dann einen besseren.

@castorp
Ich habe aber bestell_datum so erstellt:

bestell_datum VARCHAR(30) NOT NULL,

Jetzt sagst du bestimmt, ich muss das bestell_datum als date erstellen richtig? Sonst weis postgres nicht was month ist ?! Kann ich auch nach der Stelle 4 und 5 suchen? das wäre 05?

Bitte verwende IMMER korrekte Datentypen. Wir sind hier ja nicht bei MySQL. In Strings kannst Du auch nach der 4 und 5 Stelle suchen, das geht z.B. via substring(string [from int] [for int]). Again: nutze korrekte Datentypen

Speichere niemals (wirklich: niemals) ein Datum (oder Zahlen, oder eine Uhrzeit oder Zeit & Uhrzeit) in einer VARCHAR Spalte.

ok danke, kein Problem, aber warum?

Ich habe ein bieschen googelt, ich lösche die Tabelle und erstelle Sie neu mit dem unterschied:

erstelldatum_blalba     date default current_date NOT NULL,

mit insert muss ich mich nicht mehr die Spalte erstelldatum_blalba kümmern, sowie update.
Beim auslesen der kompletten Zeile habe ich das Datum als ich insert benützt habe.

Stimmt das so?
Wie ändere ich dann das Datum von einem Eintrag von der Tabelle?

via UPDATE. Der Default-Wert ist nur beim Insert relevant, willst Du bei einem Update das auf das aktuelle datum setzten (als default) brauchst Du einen trigger.