dbwizard Geschrieben 2. April 2008 Teilen Geschrieben 2. April 2008 Hm...ok und die korrekten Datums wie 01.01.2006 werden auch so übernommen und die anderen werden dann eben konvertiert? - Das kannst du vorgängig überprüfen, indem du nur einen Select (anstelle eines Updates) machst und dass Ergebnis analysierst. Wenn es ok ist, kannst du diese Konvertierung für den Update verwenden Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 3. April 2008 Autor Teilen Geschrieben 3. April 2008 Das funktioniert so nicht. Also mein Befehl sieht so aus: Also ohne eine neue Spalte, ich kann ja dann auch einfach die bestehende Spalte updaten. update dm_fares_temp set eff = to_char(to_date(eff,'DD.MM.YYYY')); Dann kommt aber der Fehler: ORA-01858: a non-numeric character was found where a numeric was expected Also wie sieht jetzt ein korrektes Statement aus, mit dem ich die Datumsspalte insofern bereinige, damit alle DD-MON-YY in DD.MM.YYYY umgewandelt werden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dbwizard Geschrieben 3. April 2008 Teilen Geschrieben 3. April 2008 Also wie sieht jetzt ein korrektes Statement aus, mit dem ich die Datumsspalte insofern bereinige, damit alle DD-MON-YY in DD.MM.YYYY umgewandelt werden? Also, ich habe mal ein Beispiel gemacht, mit deinen Daten.... oracle@CHTHL-TUX-ORACLE2:/usr/data/oracle/scripting/dba> sqlplus m_hoko/m_hoko SQL*Plus: Release 10.2.0.2.0 - Production on Thu Apr 3 14:26:26 2008 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL> spool test.txt --> Mal eine Testtabelle erstellen... SQL> CREATE TABLE testdatum (datumswert VARCHAR2(20)) / Table created. --> und ein paar Testdaten, gemäss deiner Liste.... SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('12.10.2006') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('12.10.2006') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('14-MAR-07') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('20-JUL-05') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('20-JUL-05') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('20-JUL-05') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('11.06.2006') / 1 row created. SQL> INSERT INTO testdatum ("DATUMSWERT") VALUES ('31.03.2007') / 1 row created. SQL> SELECT * from testdatum 2 / DATUMSWERT -------------------- 12.10.2006 12.10.2006 14-MAR-07 20-JUL-05 20-JUL-05 20-JUL-05 11.06.2006 31.03.2007 8 rows selected. --> Hier die Konvertierung, direkt als Update.... SQL> update testdatum SET datumswert = to_date(datumswert,'dd.mm.yyyy') / 8 rows updated. --> mal gucken, was rausgekommen ist... SQL> SELECT * from testdatum / DATUMSWERT -------------------- 12.10.2006 00:00:00 12.10.2006 00:00:00 14.03.0007 00:00:00 20.07.0005 00:00:00 20.07.0005 00:00:00 20.07.0005 00:00:00 11.06.2006 00:00:00 31.03.2007 00:00:00 8 rows selected. --> Das wär dein Ziel gewesen ? SQL> SQL> spool off SQL> - ich hoffe, das hilft dir weiter.... Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 3. April 2008 Autor Teilen Geschrieben 3. April 2008 Ja das hab ich mir gedacht, also ich weiß net was bei uns unterschiedlich is aber irgendwas ist es, also ich hab das mal alles genauso gemacht wie dus gemacht hast du bei ausführung des update-statement kommt wieder die fehlermeldung: ORA-01858: a non-numeric character was found where a numeric was expected ------------------------------------------------------------------------------ OK, des war wieder des language-problem. Also es funktioniert! Boah das nervt, weißt du ob ich das irgendwie einstellen kann dass der die language immer auf american lässt? weil ich muss des sonst jedes ma aufs neue machen und wenn ichs ma vergess kommen fehler wie die beschriebenen. Hm ok noch ein update, also bei meinen daten kommt immer noch diese fehlermeldung trotz sprachänderung, liegt es daran dass bei mir die daten vielleicht zum teil in deutsche als auch amerikanischen format vorliegen oder ist das ein anderer grund? Ok noch ein update, also wenn dein update-statement auf meine spalte aus der zwischentabelle anwende, also der spalte, wo nur unkonforme dates drin stehn, dann geht das. Das würde gleichzeitig bedeuten, dass er bei den konformen dates probleme hat und deswegen den fehler ausgibt, was allerdings komisch is, weil genau das hast du ja als beispiel gemacht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 4. April 2008 Teilen Geschrieben 4. April 2008 Ja das Problem hatten wir ja schon mal. Leider hast meine beiden Beiträge bezügl. den regulären Ausdrücken komplett ignoriert. Wenn man genau nachdenkt, braucht man auch gar keine reg. Ausdrücke, man muss nur dafür sorgen, dass nur die falschen Einträge selektiert werden. Also: update t set c=to_char(to_date(c,'DD-MON-YY'),'DD.MM.YYYY') where c like '__-___-__' Und damit hat sich das erledigt. Sollten deutsche und amerikanische Monatsnamen vorhanden sein, musst Du wahrscheinlich wirklich einen regulären Ausdruck dafür bauen, oder ein anderes WHERE Konstrukt. Ich hoffe das ist dir eine Lehre nie Datumswerte in einem varchar Feld zu speichern Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 4. April 2008 Autor Teilen Geschrieben 4. April 2008 Ja wie hätte ich das denn sonst machen sollen? Ich hab das ja nicht freiwillig gemacht, aber die Daten kamen aus einer anderen Datenbank über eine CSV-Datei, und diese Daten musste ich ja erstmal in die DB reinbekommen und da eben in der Datumsspalte nicht alle Einträge Date-konform war konnte ich diese ja auch nicht in eine Date-Spalte importieren, da es da ja geknallt hätte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 4. April 2008 Autor Teilen Geschrieben 4. April 2008 Ok eine Frage hät ich noch. Und zwar zeigt er mir an dass er alle Zeilen geupdatet hat, aber normal sollte er doch nur die zeilen updaten die dem format dd-mon-yy entsprechen. was hat er also mit den einträgen gemacht die schon korrekt waren? weil durch die bedingungung where a like '__-___-__' sollten ja alle einträge ausgeschlossen werden die z.b. so sind 11.11.1911 Des verwirrt mich jetzt en bissel dass der jetzt alle geupdatet hat Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 4. April 2008 Teilen Geschrieben 4. April 2008 Des verwirrt mich jetzt en bissel dass der jetzt alle geupdatet hat Mich auch. Wenn Du dir Usrsprungsdaten noch hast, selektier doch mal mit dieser Einschränkung. Vielleicht hast dich nur getäuscht. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.