Access-DB/SQL Datensätze trennen zum Verarbeiten!

Navid

Grünschnabel
Hallo,

ich hab folgendes schwerwiegendes Problem:

ich sitze an einer wahrlich furchtbar designen (wahrscheinlich ohne nachdenken eingehackten) Datenbank mit einem Feld indem sich (nicht lachen bitte es ist nur traurig) ein Datum UND eine Uhrzeit zusammen befinden getrennt durch ein "Leerzeichen"

das sieht dann etwa so aus:

10.02.2006 5:42:20

naja und ich hab nun die Aufgabe solche Dinge durchzuführen wie:

- Rausfinden was vom 10.2.06 bis 30.3.06 um 6 Uhr passiert ist

d.h. ich muss per SQL Abfrage dieses Feld trennen.

Nur WIE?

PS: Da diese Datenbank Grundlage für eine Software ist die ich nicht verändern kann, darf ich auch die Datenbank nicht normalisieren (was ja der ehr Logische Schritt wäre). Ich muss also irgentwie den String dieses Feldes nach entweder Zeichen oder anderem trennen und mit dem Ergebnis weiterarbeiten.

Vielen dank im Vorraus
 
Hallo Navid,

es gibt String-Funktionen im SQL.
z.B. MID(String, Startzeichen, AnzahlZeichen)

Vielleicht funktioniert auch ein Vergleich über LIKE mit Wildcards.

Gruß
tino
 
hm den Tag damit zugebracht nach einer Lösung zu suchen.

das mit dem Befehl "Mid" in Kombination mit "Len" sah in der Theorie sehr gut und brauchbar aus führte in der Praxis aber auch nach 3 h Fehlersuche nur so "Befehl nicht gefunden" Fehlern.

Ich bezweifel langsam das das ohne VB Kenntnisse überhaupt zu schaffen ist.

Werde mir erstmal ein besseres SQL-Syntax Buch besorgen und dort irgentwie nachlesen.

Vielleicht kann mir jemand ja noch etwas genaueres Sagen.

In C wäre das alles so simple...

Packe Feld in einen String dann ne schicke For Schleife die abtestet ob der untersuchte Wert mit dem gesuchten übereinstimmt ... wenn ja bumm in Array speichern ausgeben fertig!

Oder auch Berechnungen zwischen den Zeiten die ich so aus dem Feld bekomme alles so simple. WIESO ist SQL soviel verzwickter?

PS: gibt es eine möglichkeit irgentwie per VB Verbindung C-code auszuführen um damit diese für meine Begriffe unnötig komplexen SQL Abfragen nur auf das nötigste (Speichern Feld 1-xx in String oder Vector) zu beschränken und den Rest per C zu bauen? :suspekt:

PPS: Das mit Wildcards hab ich auch versucht bringt aber nix weil der zwar die richtigen Felder ausgibt, diese aber immernoch das Datum vorweck stehen haben was ich ja eben loswerden will.
 
Kennt dein Access den Befehl MID nicht oder wie ist das zu verstehen.

Also ich habe selbst schon SQL mit MID und einer Access 2000 DB verwendet.
Mit VAL kannst Du dann wieder Zahlen auß den einzelnen Abschnitten machen.

Gruß
tino
 
tinopolis hat gesagt.:
Kennt dein Access den Befehl MID nicht oder wie ist das zu verstehen.

Also ich habe selbst schon SQL mit MID und einer Access 2000 DB verwendet.
Mit VAL kannst Du dann wieder Zahlen auß den einzelnen Abschnitten machen.

Gruß
tino

genau MID wird nicht als Funktion erkannt. Ich weis aber nicht ob nur der Syntax falsch ist (mit dem ich mich mit abstand am meisten rumquäle) oder ob es die Funktion in meiner Access 2003 (ohne Jet) Version nicht gibt.

Was mir dazu so zu schaffen macht ist, dass ich keine Möglichkeit sehe ausser per Try-n-Error den richtigen Syntax meiner benötigten Abfragen rauszufinden. Das das extrem mühsam ist kann sich jeder vorstellen.

Gibt es nicht wie in einer "richtigen" Programmiersprache eine Art Debugger der einem wenigstens rudementäre Hilfe leistet? Gefunden hab ich sowas nochnicht.


Wär es möglich mir einen Quelltext der Anweisung zu geben wie ich:

Datensatz in String schreibe und dann ab Stelle 11 bis Ende abgeschnitten als Abfrageergebnis ausgebe?


Im Moment fehlt mir jeder Ansatzpunkt ich trete auf der Stelle und die Zeit is knapp (wie immer). Schön das kein Buch und keine mir bekannte HP irgentetwas in dieser Art benutzt.

Klar alle sagen nur: "Designt eure Datenbank richtig dann habt ihr solche Probleme nicht" :mad:
 
Hi war ein paar Tage weg.

Datensatz in String schreibe und dann ab Stelle 11 bis Ende abgeschnitten als Abfrageergebnis ausgebe?

Meinst Du in SQL oder wie ?

Man kann auch funktionen im Access anlegen. Habe ich aber noch nie verwendet.

Gruß
tino
 
tinopolis hat gesagt.:
Hi war ein paar Tage weg.



Meinst Du in SQL oder wie ?

Man kann auch funktionen im Access anlegen. Habe ich aber noch nie verwendet.

Gruß
tino

Ja genau als SQL Abfrage in Access möchte ich eine Spalte die z.b. enthält:

"12.4.2006 14:20:10" durchsuchen lassen nach 12.4.2006 bzw. nur 12.4. und das ergebnis soll sein 14:20:10 bzw. 12.4.2006 wenn ich nach 14:20:10 suche...

im moment schaff ichs wieder das er den Datensatz bei suche nach "12.4.2006" findet noch das er bei der Ausgabe den Datensatz teilt...

da ich nun seit etwa 4 monaten an dem problem immerwieder hänge umschiffe ich es mit allerlei tricks... nur eine endgültige lösung würde mir die meisten sorgen abnehmen...

Bitte überlegt nochmal ob ihr nicht doch eine lösung habt

(ps. vba-code wird wohl nicht funktionieren da das abfrageergebnis nicht zwischengespeichert werden kann und ich es für weitere berechnungen brauche)
 
Navid hat gesagt.:
Hallo,
ich sitze an einer wahrlich furchtbar designen (wahrscheinlich ohne nachdenken eingehackten) Datenbank mit einem Feld indem sich (nicht lachen bitte es ist nur traurig) ein Datum UND eine Uhrzeit zusammen befinden getrennt durch ein "Leerzeichen"
Es ist durchaus üblich ein Datum UND eine Uhrzeit in ein Feld zu schreiben. Dafür gibt es schließlich extra den Typ DATETIME.

Ganz einfach trennen lässt sich das folgendermaßen:

Die Werte in ein Array einlesen und dann Datum und Uhrzeit durch SPLIT oder ähnlichem trennen. Dann kannst du beide Werte separat in die DB pusten. Damit sollte dann dein Problem auch leicht zu lösen sein (Einträge mit dem passenden Datum suchen und aus dem Ergebnis dann die Datensätze mit den passenden Zeiten rausfiltern).
 
Zuletzt bearbeitet:
Hm nach ewigen suchen kam der Tipp mit dem datetime datentyp ganz richtig... dann nochmal viele stunden weitersuchen fand ich die so simple antwort:

(CAST(DATEPART(hh, MAX(Ende) - MIN(Start)) * 3600 AS float) + CAST(DATEPART(mi, MAX(Ende) - MIN(Start))
* 60 AS float) + CAST(DATEPART(ss, MAX(Ende) - MIN(Start)) AS float)) / 3600 AS Ges_arbeitszeit


schneidet das datum weck und wandelt die zeit in stunde, min um ... soleicht kanns sein... kostenpunkt 8 tage arbeitszeit :-(

naja das sind meine erfahrungen mit sql... standart triviale hilfe bekommt man überall aber sobald es ans anwenden geht weis niemand mehr wirklich rat...
 

Neue Beiträge

Zurück