Autor Beitrag
highlander78
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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:
ausblenden 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 :arrow: braucht MySQL gar nicht erst parsen.

Für den zweiten Fall brauchen wir sie aber:
ausblenden 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 :zwinker: )

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Fr 12.03.10 16:31 
Hi,

habe mir gerade die "dtTime" Spalte angesehen und es sieht so aus:

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

ausblenden SQL-Anweisung
1:
SELECT lError, dtTime, strPartNumber FROM dbo.V_PICKUPERROR6 WHERE dtTime = '12.03.2010'					
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 12.03.10 21:05 
Hi,

meinen Beitrag hast nicht gelesen?

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ja, kann man das Datum daraus extrahieren und zum Vergleichen verwenden, z.B. mit [url=dev.mysql.com/doc/re...n_date]DATE()[/url].

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Da echte DATETIME-Felder normalerweise aber das ISO-Format für die Anzeige nutzen


Also nochmal:
ausblenden SQL-Anweisung
1:
2:
3:
SELECT lError, dtTime, strPartNumber
FROM dbo.V_PICKUPERROR6
WHERE DATE(dtTime)="2010-03-01"


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

_________________
"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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



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

ausblenden SQL-Anweisung
1:
2010-03-12 15:30:28.997					


zum Vergleich sieht diese Spalte in dem DataGridView so aus:

ausblenden SQL-Anweisung
1:
12.03.2010 15:30					


mein Kopf kocht hier schon langsam :-)



Gruss
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

user profile iconhighlander78 hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
CREATE TABLE  `test`.`nslog` (
....
  `DATARATE` int(11NOT NULL,
  `CHANNEL` int(11NOT NULL,
  `DATEGMT` datetime NOT NULL,
  PRIMARY KEY  (`BSSID`,`DATEGMT`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 12.03.10 23:36 
user profile iconhighlander78 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Fr 12.03.10 23:45 
Sorry dann war das mein Fehler...
highlander78 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: So 14.03.10 17:42 
Hat vielleicht jemad eine Idee..?
Habe das bis jetzt noch nicht gelöst..

Gruss
highlander78 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mo 15.03.10 20:12 
Also jetzt komme ich auf der SQL Datenbank an die Daten über Datum ran und zwar so:

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mo 15.03.10 21:31 
GetData sieht so aus:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mo 15.03.10 21:33 
Könnte mal jemand den Beitrag in das C# Forum verschieben.

Danke