ddmmyyyy
ist kein gültiges Datumsformat. Sie müssen diese Zeichenfolge zuerst in etwas umwandeln, das als DATE
geparst werden kann / DATETIME
. Der schnellste Weg ist vielleicht einfach SUBSTRING
die Stücke in ein mm/dd/yyyy
Format. Das konvertiert erfolgreich. Aber Sie haben einen VARCHAR(8)
. Also müssen Sie das entweder auf VARCHAR(10)
erhöhen (oder noch besser, einfach CHAR(10)
), oder deklarieren Sie eine lokale Variable, die den geänderten Wert enthält.
Zum Beispiel:
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
+ '/' + SUBSTRING(@Date, 1, 2)
+ '/' + SUBSTRING(@Date, 5, 4);
SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014 2014-03-25
BEARBEITEN: Eigentlich habe ich einen etwas einfacheren Weg gefunden. Ich habe mit dieser Methode angefangen, aber festgestellt, dass sie mit ddmmyyyy
nicht funktioniert im Gegensatz zu mmddyyyy
. Ich habe irgendwie übersehen, dass es eine passende Datumsstilnummer für dd/mm/yyyy
gibt . Fügen Sie also einfach zwei Schrägstriche zur eingehenden Zeichenfolge hinzu und rufen Sie dann CONVERT
auf funktioniert, aber nur, wenn Sie 103
verwenden als "Stil". Und wie bei der ersten Lösung muss entweder der eingehende Parameter in VARCHAR(10)
geändert werden oder CHAR(10)
statt VARCHAR(8)
, oder erstellen Sie eine lokale Variable mit CHAR(10)
.
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');
SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014 2014-03-25
Konvertierungs-"Stile" finden Sie auf der MSDN-Seite für CAST and CONVERT .