Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren Sie varchar(ddmmyyyy) in das Datumsformat

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 .