Was Sie benötigen zwei Schritte tun: den Wert in der Spalte als Datum speichern und dann die Art ändern.
In Ihrem Fall ist ein dritter Schritt erforderlich, daher ist die Spalte groß genug, um die Wertzeichenfolgendarstellung des Datumswertes zu speichern. Ich denke, dies in SQL Server arbeiten:
ALTER TABLE TableName ALTER COLUMN DateOfBirth NVARCHAR(32);
UPDATE TableName
SET DateOfBirth = YearOfBirth + '-01-01';
ALTER TABLE TableName ALTER COLUMN DateOfBirth Date;
Die erste ALTER TABLE
die Spalte ändert breit genug ist, um für den neuen Monat und Tag. Dann wird das Datum in einem Standardformat erstellt (okay, das Auslassen der Bindestriche wäre noch mehr Standard). Dann wird die Spalte in ein Datum umgewandelt.
Wenn Sie nur etwas wollen, das wie ein Datum aussieht - und eine Menge Kritik auf Stack Overflow;) - können Sie den dritten Schritt beseitigen.
Markieren Sie die von Ihnen verwendeten dbms. Einige nicht-ANSI SQL dort ... – jarlh
Warum wird es 1972-0 ** 6 ** - 01? –
Das beste Format, wenn Sie Datumsangaben als * String-Literale * ausdrücken müssen, ist das angepasste ** ISO-8601 ** -Format in SQL Server: 'YYYYMMDD' (keine Bindestriche, keine Leerzeichen - nichts). Dies funktioniert für ** alle ** regionalen/Spracheinstellungen - versuchen Sie es so: 'CONVERT (datetime, YearOfBirth + '0101', 103)' und ich bin mir ziemlich sicher, dass es gut funktioniert –