2016-11-09 13 views
1

Ich habe Beispieldaten wie folgt aus:Konvertierungsprobleme mit VARCHAR zu DATETIME-

SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120); 

wenn ich ausführen dieses erhalte ich Fehler wie folgt aus:

Msg 241, Ebene 16, Status 1, Zeile 1
Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit von Zeichen Zeichenfolge.

So dann habe ich entfernt erstes 2 Zeichen des Jahres 1997

SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/97', 3), 120); 

Und es gab wie dieses Set Ergebnis:

Date 
1997-10-11 

So wurde es von TT/MM/JJ-Format konvertiert zu YYYY-MM-DD

Gut Aber warum hat es 1997 genommen, wenn ich 17 gebe, wird es als 2017 geben. Wenn ich giv e 37 es wird 2037 geben und wenn ich 67 gebe und es gibt 1967.

Und schließlich, wie kann TT/MM/JJJJ bis JJJJ-MM-DD Format

+0

denken Sie an einen SQL-Datentyp DATE als keine tatsächliche Format DD/MM/YY oder YYYY/MM/DD mit - denn das Format ist nur verwendet, etwas, das es Ihnen als Zeichenfolge angezeigt werden soll. Das Jahr-Rätsel ist aufgrund von "Zoning" einfach zu entscheiden, dass 97 eher 1997 als 1897 oder 2097 sein wird (gerechtfertigt? Sie entscheiden) Ich denke, Sie müssen einen anderen Wert als 120 – Cato

+0

Konfigurieren Sie die zweistellige Cutoff Server-Konfigurationsoption] (https://msdn.microsoft.com/en-gb/library/ms191004.aspx) –

Antwort

1

Sie müssen 103 verwenden, wenn Sie vierstellige Jahr angeben:

SELECT CONVERT(DATE, '11/10/1997', 103) 
-- 1997-10-11 (DATE) 

Wenn Sie das Datum konvertieren möchten zurück in eine Zeichenfolge, wandeln es wieder:

SELECT CONVERT(VARCHAR(10), CONVERT(DATE, '11/10/1997', 103), 120) 
-- 1997-10-11 (VARCHAR) 

die komplette Liste der Artenis available here.

+0

aber warum es die Jahre voraussagt, wenn ich 37 gebe, gibt es 2037 zurück, wenn ich 50 gebe, gibt es 1950 @salman – mohan111

+0

Zweistellige Jahre wie 50 und 37 sind mehrdeutig. SQL Server verwendet eine [Konfigurationsoption] (https://msdn.microsoft.com/en-us/library/ms191004 (v = sql.110) .aspx), um zu entscheiden, ob 37 1937 oder 2037 sein soll. Standardmäßig Werte "0 ... 49" gehören zu 2000ern und 50 ... 99 gehören zu 1900. Sie können dies konfigurieren, aber die richtige Lösung besteht darin, vierstellige Jahre zu verwenden. –

+0

ok salman ... Punkt genommen – mohan111

0

Statt 3 können Sie pun 103 Also: SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 103), 120); zurück 1997-10-11

0

Können Sie das versuchen?

declare @datechar as char(19) ='11/10/1997' 

select FORMAT(convert(date,@datechar,103),'yyyy-MM-dd') 
Verwandte Themen