ddmmyyyy nie jest prawidłowym formatem daty. Musisz najpierw przekształcić ten ciąg w coś, co można przetworzyć jako DATE / DATETIME . Najszybszym sposobem może być po prostu SUBSTRING kawałki w mm/dd/yyyy format. To skutecznie konwertuje. Ale masz VARCHAR(8) . Więc albo musisz zwiększyć to do VARCHAR(10) (lub jeszcze lepiej, po prostu CHAR(10) ) lub zadeklaruj zmienną lokalną do przechowywania zmienionej wartości.
Na przykład:
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
EDYTUJ: Właściwie znalazłem nieco prostszy sposób. Zacząłem od tej metody, ale zdałem sobie sprawę, że nie działa z ddmmyyyy w przeciwieństwie do mmddyyyy . Jakoś przegapiłem, że był odpowiedni numer stylu daty dla dd/mm/yyyy . Po prostu dodaj dwa ukośniki do przychodzącego ciągu, a następnie wywołaj CONVERT działa, ale tylko jeśli używasz 103 jako „styl”. I podobnie jak pierwsze rozwiązanie, wymaga zmiany parametru przychodzącego na VARCHAR(10) lub CHAR(10) zamiast VARCHAR(8) , lub utworzenie zmiennej lokalnej jako 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
„Style” konwersji można znaleźć na stronie MSDN dla CAST and CONVERT .