Datum in String-Feld

Hallo Liste,

Ich habe wieder einmal eine kleine Frage und hoffe hier Hilfe zu finden. Wahrscheinlich ist das für die Spezialisten relativ einfach zu lösen.

Ich habe in einer Tabelle ein Feld mit einem Datum. Das Feld ist allerdings als char definiert und nicht vom Typ date, es enthält also strings. Nun ist es aber so, dass die Datumsangaben immer in folgendem Format vorliegen: 08-31-2011 usw. Also zuerst der Monat und dann der Tag. Ich würde jetzt aber gern das Datum “Deutsch” speichern also 31.08.2011. Gibt es jetzt eine Möglichkeit wie ich innerhalb des Strings die Monate und Tage “tauschen” kann, damit es richtig in der DB steht? Ausserdem bin ich mir auch gerade nicht sicher, ob es sinnvoller wäre das Format von char in date zu ändern? Für Datumsabfragen (z.B. gib mir alle Inhalte die im letzten Jahr liegen oder so ähnlich) wäre das wahrscheinlich dann einfacher wenn die Abfrage auf eine date Datentyp gemacht wird, oder?
Ich habe also ein neues Feld (Datentyp date) angelegt. Hier würde ich jetzt gern das Datum aus dem bisherigen Datumsfeld in der richtigen Form reinschreiben. Leider bekomme ich das irgendwie nicht hin.

Kann mir hierbei vielleicht irgendjemand helfen, oder mir einen Tipp geben?
Für eure Hilfe und eure nette Unterstützung bedanke ich mich recht herzlich im Voraus.

Gruss
Hanno



test=# create table hanno (datum_text text, datum_date date);
CREATE TABLE
test=*# insert into hanno (datum_text) values ('08-31-2011');
INSERT 0 1
test=*# update hanno set datum_date = to_date(datum_text, 'mm-dd-yyyy');
UPDATE 1
test=*# select to_char(datum_date, 'dd.mm.yyyy') from hanno;
  to_char
------------
 31.08.2011
(1 row)

Und ja, speicher das als DATE. Wir sind ja hier nicht bei MySQL.


Andreas

Nachtrag:

test=# alter TABLE hanno alter column datum_text type date using to_date(datum_text, 'mm-dd-yyyy');
ALTER TABLE
test=*# \d hanno ;
     Table "public.hanno"
   Column   | Type | Modifiers
------------+------+-----------
 datum_text | date |
 datum_date | date |

test=*# select to_char (datum_text, 'dd.mm.yyyy') from hanno;
  to_char
------------
 31.08.2011
(1 row)

Man braucht also keine extra Spalte …


Andreas