Ce que vous faites a besoin de deux étapes: stocker la valeur dans la colonne comme une date, puis changer le type.
Dans votre cas, une troisième étape est nécessaire. La colonne est donc suffisamment grande pour stocker la représentation sous forme de chaîne de valeur de la valeur de date. Je pense que cela va fonctionner dans SQL Server:
ALTER TABLE TableName ALTER COLUMN DateOfBirth NVARCHAR(32);
UPDATE TableName
SET DateOfBirth = YearOfBirth + '-01-01';
ALTER TABLE TableName ALTER COLUMN DateOfBirth Date;
La première ALTER TABLE
modifie la colonne pour être suffisamment large pour le nouveau mois et le jour. Ensuite, la date est construite dans un format standard (d'accord, en laissant de côté les traits d'union serait encore plus standard). Ensuite, la colonne est transformée en une date.
Si vous voulez juste quelque chose qui ressemble à une date - et beaucoup de critique sur Stack Overflow;) - vous pouvez éliminer la troisième étape.
Marquez les dbms que vous utilisez. Quelques SQL non-ANSI là ... – jarlh
Pourquoi devient-il 1972-0 ** 6 ** - 01? –
Le meilleur format si vous avez vraiment besoin d'exprimer des dates comme * littéraux de chaîne * est le format ** ISO-8601 ** adapté dans SQL Server: «YYYYMMDD» (pas de tirets, pas d'espaces - rien). Cela fonctionne pour ** tous ** paramètres régionaux/langue - alors essayez ceci: 'CONVERT (datetime, YearOfBirth + '0101', 103)' et je suis assez sûr que ça va fonctionner très bien –