Autor Beitrag
dresado
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 02.06.16 10:28 
Hallo miteinader,

ich möchte aus einer DataTable mittels DataTable.Select ein Datum filtern.

Die Abfrage bringt mir leider kein Ergebnis.
Wenn ich <= oder >= statt = verwende bekomme ich die korrekten Ergebnisse.

Ich vermute es liegt daran, dass das Feld in der Datenbank mit Datum und Uhrzeit gespeichert wird.

Hier mein Code:
ausblenden SQL-Anweisung
1:
2:
3:
myds.Tables["Preis"].Select(
"Convert(AllTKundPreisDatum, 'System.DateTime') = #3/12/2015#",
"AllTKundPreisKunNum ASC");

Vielleicht hat jemand dieses Problem schon gelöst.

MfG Dominik

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 02.06.16 13:46 
Zitat:
Vielleicht hat jemand dieses Problem schon gelöst.


Ja du ;) Siehe in deinem Beitrag oben. Was spricht dagegen es so zu machen?

Ein Convert macht dir aus einem String einen DateTime. Ich vermute mal AllTKundPreisDatum war vorher kein string (dann wäre das sortieren ein Problem) und der enthielt auch schon den Zeitanteil. Convert ändert den Typ aber es truncated keine Information.
dresado Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 02.06.16 14:31 
Hallo Ralf,

AllTKundPreisDatum ist ein datetime-Feld, welches Datum und Uhrzeit speichert.
Als Beispiel: 2015-03-12 10:23:36 (MySql)

Das Select funktioniert, wenn im Feld 2015-03-12 00:00:00 stehen würde.
Das habe ich getestet.

Also vermute ich, dass es an der Uhrzeit liegt.
Das Select vergleicht #3/12/2015 10:23:36# mit der Eingabe #3/12/2015# und erhält kein Ergebnis.

Kann ich beim Convert die Uhrzeit des Feldes irgendwie aussen vor lassen?
[Feldname].Substring(0, 10) und Left([Feldname], 10) funktionieren leider nicht.

MfG Dominik
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Do 02.06.16 15:07 
Hallo dresado,

um von einem DateTime die Uhrzeit zu entfernen, kannst du .ToShortDateString() benutzen. Das sieht dann so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
DateTime myDate = Convert.ToDateTime("02.06.2016");

Console.WriteLine(myDate.ToString());
Console.WriteLine(myDate.ToShortDateString());

//Output
//02.06.2016 00:00:00
//02.06.2016


Gruß Julian
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 02.06.16 18:10 
Zitat:
Kann ich beim Convert die Uhrzeit des Feldes irgendwie aussen vor lassen?


Nein. Zumindest ist mir das nicht bewußt.
Der Filter hat nur eingeschränkte Möglichkeiten. Guckst du in der MSDN.

Ich sehe aber auch nicht warum du "MeinDatumsFeld >= #Datum# AND MeinDatumsFeld <= #Datum+1" nicht willst?
Jede andere denkbare Möglichkeit ist weder schneller/langsamer/schöner oder sonstwas.
dresado Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 03.06.16 06:45 
Hallo Ralf,

Zitat:
Ich sehe aber auch nicht warum du "MeinDatumsFeld >= #Datum# AND MeinDatumsFeld <= #Datum+1" nicht willst?
Jede andere denkbare Möglichkeit ist weder schneller/langsamer/schöner oder sonstwas.


Danke, so habe ich es gemacht.

Ich dachte es gibt eine bessere Funktion beim DataTable.Select().

Mfg Dominik