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 .