2017-07-20 8 views
1

Ich versuche, nvarchar(5) Jahr der Geburt (z. B. 1972) in eine datetime (z. B. 1972-06-01) in einer SQL Server-Tabelle zu konvertieren.SQL Server: konvertieren nvarchar Jahr zu Datetime

Etwas wie:

UPDATE TableName 
SET DateOfBirth = CONVERT(datetime, YearOfBirth + '/01/01', 103) 

Dies scheiterte einen Fehler wirft

Conversion, wenn Datum und/oder Uhrzeit aus Zeichenfolge Umwandlung

Wie kann ich dieses Problem lösen?

+1

Markieren Sie die von Ihnen verwendeten dbms. Einige nicht-ANSI SQL dort ... – jarlh

+1

Warum wird es 1972-0 ** 6 ** - 01? –

+0

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 –

Antwort

0

Dies alles, was Sie brauchen

ist
UPDATE TableName 
SET DateOfBirth = YearOfBirth + '-06-01' 
Where YearOfBirth = '1972' 
4

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.

Verwandte Themen