Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - DataTable.Select 'System.DateTime'


dresado - Do 02.06.16 10:28
Titel: DataTable.Select 'System.DateTime'
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:

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 - 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 - 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 - 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:

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 - 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 [https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx].

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 - 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