Hallo Ihr Lieben,
ich habe gerade mal ein Problem...
Folgendes:
Von unserem "alten" Warenwirtschaftssystemhersteller habe ich gestern einen
Albtraum von Datenexport bekommen. <Pervasive SQL 9, BTrieve V 9.5>
Nachdem ich mich mühsam durch Tabellen- und Spalten gekämpft habe, von
denen sich keine eine (namenstechnisch) an kompatible Standards hält habe ich
nun folgendes Problem, worauf ich mir so gar keinen Reim machen kann.
Und zwar gibt es in der Pervasive-DB (anscheinend) keinen Date/DateTime-Datentyp - anstelle von sauberen Daten habe ich hier jedesmal einfach einen Int32 stehen.
Ich wüsste gerne ob und vor allem wie man das konvertieren kann - ich kann mir
nämlich keinen Reim drauf machen.
Versucht habe ich es schon mit:
Convert.ToDateTime(int value);
DateTime.Parse(value.ToString());
Zudem habe ich noch geprüft ob der int vielleicht den Ticks entspricht - Leider auch nicht 😦
Die Daten sehen folgendermaßen aus:
DB-Spalte Übersetzung
733030 20.12.2007
733738 27.11.2009
………… …………………
Das Ganze wird zwar so oder so sehr ungemütlich (Die 'Datumswerte' gibt's in nahezu jeder Tabelle gleich mehrfach) - aber vorerst würde mich einfach mal
interessieren, wie man sowas umwandeln kann...
Ich wäre ziemlich happy wenn dazu jemand eine gute Idee hat !
Grüße
Achim
EDIT: Sry - ich hoffe so passt es besser - bin mir leider (bis jetzt) nicht bewusst wie ich das Problem kurz umreissen soll 😦
Hallo Taipi88,
komisches Datumformat, ja. Ist mir bis jetzt auch noch nicht über den Weg geloffen.
Als erstes dachte ich mir es wär vielleicht die Excel Darstellung des Datums, aber dann wär der 733030 der 19.12.3906
Eine Frage habe ich jedoch: ist der Integer und das Datum in einer Spalte oder sind dies 2 verschiedene.
Von unserem "alten" Warenwirtschaftssystemhersteller habe ich gestern einen Warum fragst du nicht bei ihm nach wie das Datum bei ihm "interpretiert" wird?
Gruß
Michael
Hallo Taipi88,
das sind die Tage seit dem Datum 1.1.0000
733030 = 20.12.2007
733042 = 01.01.2008
Wenn man das dann durch 365 teilt dann kommt man auf 2008,33
Was den Jahren entspricht.
Die kleine Abweichung wird durch die Schaltjahre verursacht.
Gruß
Michael
Hallo,
zuerst einmal vielen Dank für die Antwort !
Leider steht (in der Datenbank) nur der Integer - das entsprechende Datum habe ich aus dem dazugehörigen WWS (welches wir allerdings nicht mehr lange haben)
Dummerweise hat der Mann vor meiner Zeit an WWS geliefert, was nicht kann was meiner Chefin in Lasten- und Pflichtenheft zugesichert wurde (Mehrbenutzerfähigkeit z.B. nicht gegeben)
Nach ca. 2 Jahren "herumbessern" ging das Ganze dann zum Anwalt und zum Gericht - von welchem er vorerst dazu verdonnert wurde uns einen Export zu machen.
Der Mann redet somit leider nur mit mir wenn er eine Anordnung dazu bekommt...
ABER:
Ich habe in der Zwischenzeit etwas festgestellt:
Der Integer 1 entspricht dem 01.01.0001 - man muss "einfach" nur hochrechnen 😛
Ok - neue Frage: Gibt es dafür bereits eine Klasse / Funktion die das kann ?
Ich glaube das mit dem Hochrechnen ist bei (sehr sehr vielen) Records doch
echt mächtig zeitaufwändig...
@michlG: Auch dir danke 😃
Was die Rundungsfehler angeht: Leider so nicht wirklich gut - geht dummerweise
auch um die Daten von Rechnungen - bin mir ziemlich sicher da bekomme ich Ärger 😛
Gruß
Achim
So, hi Ihr Lieben,
erstmal vielen Dank für eure Antworten - tut mir leid, dass ich's erst nicht selbst
gemerkt habe...
Ich schätze ich werde nachfragen müssen was ich nun tun soll - die Umwandlung von
227 Tabellen mit Anzahl Spalten unbekannt würde vermute ich länger dauern als mich
jemand dafür "dranhocken" möchte - Ich soll schließlich die Daten nur 'lesbar' zur Verfügung stellen...
Muss mir somit überlegen, ob es Sinn macht die integers quasi 'on-demand' umzurechnen oder diese komplett in einer neuen spalte abzuspeichern.
Vielen Dank soweit !
Achim
Och, dass es mit dem 1.1.0001 anfangen könnte ist mir nicht eingefallen. 😁
Was die Rundungsfehler angeht: Leider so nicht wirklich gut - geht dummerweise
auch um die Daten von Rechnungen - bin mir ziemlich sicher da bekomme ich Ärger 😛
Es geht ganz einfach mit folgenden code:
DateTime dt = new DateTime(1,1,1);
dt = dt.AddDays(733030);
Wobei das Result dann der 21.12.2007 und nicht der 20 ist.
Du sagst 01 ist der 01.01.0001, das kann zwar richtig sein, aber du musst aufpassen da die DateTime klasse nicht unter dem 01.01.0001 rechnen kann. Einfach -1 und die Sache hat sich
Gruß
Hallo nochmal,
für alle die's interessiert: ich soll nun neue Spalten erzeugen für alle Felder in denen (auf jegliche Art und Weise) Datumswerte stehen...
Damit Ihr alle mal was zu lachen habt...
Mittlerweile habe ich folgende Datumsformate gefunden:
Achso - auch Zeitwerte kann man so schon verunstalten wie Variante 1 bei Datum:
Geht dann genauso - nur dass man Sekunden verwendet 😜
PS: Für Variante 1 ist ein SQL-Statement der folgenden Art sehr nützlich:
DECLARE @dbase date = '01.01.1800'
DECLARE @diff int = '657072'
UPDATE Taetigkeitsbericht
SET TBER_Einsatz_bisD = DATEADD(Day, TBER_Einsatz_bis - @diff, @dbase)
WHERE (TBER_Einsatz_bis <> 0)
Liebe Grüße
Achim
PPS: Es fehlen nur noch 12 Tabellen =)