ddmmyyyy no es un formato de fecha válido. Primero debe convertir esa cadena en algo que se pueda analizar como DATE / DATETIME . La forma más rápida podría ser simplemente SUBSTRING las piezas en un mm/dd/yyyy formato. Eso convierte con éxito. Pero tienes un VARCHAR(8) . Por lo tanto, debe aumentarlo para que sea VARCHAR(10) (o mejor aún, simplemente CHAR(10) ), o declarar una variable local para contener el valor alterado.
Por ejemplo:
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
EDITAR: En realidad, encontré una forma un poco más simple. Empecé con este método pero me di cuenta de que no funcionaba con ddmmyyyy a diferencia de mmddyyyy . De alguna manera me perdí que había un número de estilo de fecha apropiado para dd/mm/yyyy . Entonces, simplemente agregue dos barras a la cadena entrante y luego llame a CONVERT funciona, pero solo si usa 103 como el "estilo". Y como la primera solución, requiere cambiar el parámetro entrante para que sea VARCHAR(10) o CHAR(10) en lugar de VARCHAR(8) , o creando una variable local para que sea 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
Los "estilos" de conversión se pueden encontrar en la página de MSDN para CAST y CONVERT .