2017-11-01 3 views
0

Der Versuch, mein Datum in ein anderes Format zu konvertieren, aber mit Problemen zu arbeiten.Konvertieren des Datumsformats in SQL Server - Abrufen des Datentyps Fehler

Derzeit meine Datumsspalte wie folgt aussieht:

YearBuilt 
1934-01-01 00:00:00:0000 
1981-01-01 00:00:00:0000 

ich es haben möchte sein:

YearBuilt 
01/01/1934 00:00:00:0000 
01/01/1981 00:00:00:0000 

I

versucht
update table set YearBuilt = '01/01/' + YearBuilt 

aber den Fehler:

Msg 241, Level 16, State 1, Line 1 
Conversion failed when converting date and/or time from character string. 

Aber meine YearBuilt-Spalte ist bereits ein Datetime-Datentyp, also bin ich mir nicht sicher, welche Zeichenfolge es zu konvertieren versucht.

Jede Eingabe wäre herzlich willkommen!

Antwort

2

Datum/Uhrzeit werden in SQL in einem internen Format gespeichert. Das ist eine gute Sache! Sie sollten das Format bei der Ausgabe angeben. Das heißt, können Sie tun:

select '01/01/' + datename(year, YearBuilt) 

Sie diese in die Tabelle bauen:

alter table t add YearBuilt_str as ('01/01/' + datename(year, YearBuilt)) 

Dann einfach die String-Version verwenden, um das alternative Format zu bekommen.

+0

Thank you! Aber ist es möglich, den Zeitstempel bei dieser Konvertierung beizubehalten? – S31

0

Versuchen Sie folgendes:

DECLARE @D DateTime = '2017-11-01 00:00:00:000'; 

SELECT @D AS Input, 
     CONVERT(VARCHAR(50) , @D, 101) + 
     SUBSTRING(CONVERT(VARCHAR(50), @D, 113), 12, LEN(CONVERT(VARCHAR(30), @D, 113))) AS OutPut; 

Ergebnis:

+---------------------+------------------------+ 
|  Input  |   OutPut   | 
+---------------------+------------------------+ 
| 01.11.2017 00:00:00 | 1/11/2017 00:00:00:000 | 
+---------------------+------------------------+ 
0

Wenn Ihre Spalte Date Time Datentyp hat, dann können Sie das Datum nicht mit Ihrer benutzerdefinierten Datumsformat aktualisieren.

Aber können Sie Ihr Datum mit Ihrem benutzerdefinierten Format von SQL Abfrage wählen:

SELECT '01/01/'+CONVERT(VARCHAR(4), YEAR(YearBuilt))+' '+CONVERT(VARCHAR(MAX), CAST(YearBuilt AS TIME)) [YearBuilt] 
FROM <table_name>; 

Ergebnis:

YearBuilt 
01/01/1934 00:00:00.0000000 
01/01/1981 00:00:00.0000000 
Verwandte Themen