sql >> Base de Datos >  >> RDS >> Sqlserver

convertir varchar (ddmmyyyy) al formato de fecha

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 .