Autor |
Beitrag |
highlander78
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 02:53
Hallo,
zu meinem Problem.
In meiner Abfrage lasse ich mir 3 Spalten anzeigen.
In einer Spalte ist das Datum und Uhrzeit in diesem Format " TT.MM.JJJJ XX:XX "
1. möchte ich gerne alle Einträge eines bestimmten Datums anzeigen
2. alle Einträge von "Datum,Uhrzeit" bis "Datum,Uhrzeit".
Ich habe eine Methode "GetData" mit der ich die SQL Kommandos erzeuge.
Zitat: | Mit diesem Kommando bekomme ich alle 3 Tabellen angezeigt:
GetData("SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6");
Jetzt wollte ich nach Datum filtern:
GetData("SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE dtTime LIKE '11.03.2010' "); |
Leider klappt das nicht.
Vielleicht hat jemand paar Tips.
Im Anhang ist ein Screenshot der Tabelle
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von highlander78 am Sa 13.03.10 10:39, insgesamt 1-mal bearbeitet
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 12.03.10 03:57
Hi,
Ist die Spalte ein echtes DATETIME/TIMESTAMP-Feld?
Wenn ja, kann man das Datum daraus extrahieren und zum Vergleichen verwenden, z.B. mit DATE().
Da echte DATETIME-Felder normalerweise aber das ISO-Format für die Anzeige nutzen, nehme ich mal an dass da einer mit Textfeldern rechnen will?
Dann müsste man nämlich erstmal ein Datum aus dem Datum machen (  ), dafür gibts STR_TO_DATE().
Zusammen mit deinem Code ergibt das also:
SQL-Anweisung 1: 2: 3:
| SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE STR_TO_DATE(dtTime, "%d.%m.%Y")="2010-03-01" |
Achtung: hier ist der Format-Ausdruck etwas gekürzt, da wir die Uhrzeit sowieso abgeschnitten hätten  braucht MySQL gar nicht erst parsen.
Für den zweiten Fall brauchen wir sie aber:
SQL-Anweisung 1: 2: 3:
| SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE STR_TO_DATE(dtTime, "%d.%m.%Y %H:%i") BETWEEN "2010-03-01 07:30" AND "2010-03-05 16:00" |
(erste Arbeitswoche des März, extra auf den Kalender geguckt  )
Du solltest allerdings wissen, dass das relativ langsam ist, die Spalte sollte schon DATETIME sein. Die Statements sind dann analog gebaut, nur halt das erste mit DATE().
HTH,
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 10:03
Schaue mir später den Eintrag in der Datenbank an ...normalerweise sollte die Spalte "dtTime" schon ein DATETIME sein.
Bin mir aber nicht sicher...
Danke für die flotte Antwort..
Gruss
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 16:31
Hi,
habe mir gerade die "dtTime" Spalte angesehen und es sieht so aus:
C#-Quelltext 1:
| dtTime(datetime,not null) |
mit der Abfrage bekomme ich nur eine leere Zeile angezeigt, es sind aber daten mit dem Datum vorhanden..
SQL-Anweisung 1:
| SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE dtTime = '12.03.2010' |
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 12.03.10 21:05
Hi,
meinen Beitrag hast nicht gelesen?
Martok hat folgendes geschrieben : | Da echte DATETIME-Felder normalerweise aber das ISO-Format für die Anzeige nutzen |
Also nochmal:
SQL-Anweisung 1: 2: 3:
| SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE DATE(dtTime)="2010-03-01" |
SQL-Anweisung 1: 2: 3:
| SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE dtTime BETWEEN "2010-03-01 07:30" AND "2010-03-05 16:00" |
Ich finde das grade erstaunlich, dass es da keinen Fehler gibt, wenn das Format nicht passt.
MySQL halt 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 21:57
Hi,
Ja ich habe deinen Beitrag gelesen und sitze schon seit 3 Stunden am Rechner...
Mit den von dir genannten Beispielen bekomme ich keine Ausgabe..
Ich habe mir gerade nochmal die Datenbank angesehen und habe festgestellt dass das Datum in der "dtTime" Spalte direkt auf der Datenbank in diesem Format angezeigt wird:
Hier eine Beispielzeile aus der "dtTime" Spalte in der Datenbank:
SQL-Anweisung 1:
| 2010-03-12 15:30:28.997 |
zum Vergleich sieht diese Spalte in dem DataGridView so aus:
SQL-Anweisung
mein Kopf kocht hier schon langsam
Gruss
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 12.03.10 22:19
Dann probier mal einfache Anführungszeichen statt der doppelten. Das kann bei hinreichend seltsamen MySQL-Versionen vielleicht Probleme geben. Von welcher Version reden wir eigentlich?
Richtiger wären auch einfache, seh ich grade.
highlander78 hat folgendes geschrieben : | Ich habe mir gerade nochmal die Datenbank angesehen und habe festgestellt dass das Datum in der "dtTime" Spalte direkt auf der Datenbank in diesem Format angezeigt wird: |
Wie ich bereits mehrmals sagte, das native Text-Format für Datumswerte ist ISO 8601. Und genau so muss das dann auch in die Query.
Folgendes funktioniert bei mir auf einer Test-Tabelle, die ich noch rumstehen hatte:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7:
| CREATE TABLE `test`.`nslog` ( .... `DATARATE` int(11) NOT NULL, `CHANNEL` int(11) NOT NULL, `DATEGMT` datetime NOT NULL, PRIMARY KEY (`BSSID`,`DATEGMT`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
SQL-Anweisung 1: 2:
| select dategmt from nslog where date(dategmt) = '2007-10-23' |
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 23:11
Die Datenbank ist auf Microsoft SQL SERVER 2005.
Habe 2 Screenshots , für mich reicht es heute
Gruss
Einloggen, um Attachments anzusehen!
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 12.03.10 23:36
highlander78 hat folgendes geschrieben : | Die Datenbank ist auf Microsoft SQL SERVER 2005. |
Ahja.
Und warum schreibst du dann in den Thread MySQL?
Mit sowas kenne ich mich nicht aus, sorry. Muss jemand anders ran...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Fr 12.03.10 23:45
Sorry dann war das mein Fehler...
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: So 14.03.10 17:42
Hat vielleicht jemad eine Idee..?
Habe das bis jetzt noch nicht gelöst..
Gruss
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Mo 15.03.10 20:12
Also jetzt komme ich auf der SQL Datenbank an die Daten über Datum ran und zwar so:
SQL-Anweisung 1: 2: 3:
| SELECT dtTime, lError, strPartNumber FROM dbo.V_PICKUPERROR6 CONVERT(datetime, '15.03.2010 14:30', 104) AND CONVERT(datetime, '15.03.2010 23:30', 104) |
jetzt wollte ich diese Abfrage in meine GetData funktion einbauen , aber leider bekomme ich keine ausgabe, und zwar so:
C#-Quelltext 1: 2: 3:
| GetData("SELECT dtTime, lError, strPartNumber FROM dbo.V_PICKUPERROR6" + " CONVERT(datetime, '15.03.2005 14:30', 104)" + " AND CONVERT(datetime, '15.05.2005 23:00', 104)"); |
Was mache ich falsch ?
Gruss
Zuletzt bearbeitet von highlander78 am Mo 15.03.10 21:28, insgesamt 1-mal bearbeitet
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 15.03.10 20:54
Vergiss was hier stand, ich hab das C# nicht für voll genommen.
Syntaktisch ist das Statement eh sowieso völliger Blödsinn, aber wenn du sagst, es geht so...
Das Einzige, was mir einfallen würde, wäre dass GetData irgendwas mit dem Statement macht.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Mo 15.03.10 21:31
GetData sieht so aus:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void GetData(string selectCommand) { try { string connectionString = "SERVER=rbg70ret;UID=test;PWD=test;DATABASE=SiplaceOIS"; dataAdapter = new SqlDataAdapter(selectCommand, connectionString);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter); DataTable table = new DataTable(); table.Locale = System.Globalization.CultureInfo.InvariantCulture; dataAdapter.Fill(table); bindingSource1.DataSource = table; |
|
|
highlander78 
      
Beiträge: 62
|
Verfasst: Mo 15.03.10 21:33
Könnte mal jemand den Beitrag in das C# Forum verschieben.
Danke
|
|