Zum Inhalt springen

Falsches Date-Format konvertieren


ostpower

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...