Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

converter varchar (ddmmyyyy) para o formato de data


ddmmyyyy não é um formato de data válido. Você precisa primeiro transformar essa string em algo que possa ser analisado como um DATE / DATETIME . A maneira mais rápida pode ser simplesmente SUBSTRING as peças em um mm/dd/yyyy formato. Isso converte com sucesso. Mas você tem um VARCHAR(8) . Então você precisa aumentar isso para VARCHAR(10) (ou melhor ainda, apenas CHAR(10) ), ou declare uma variável local para manter o valor alterado.

Por exemplo:
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: Na verdade, encontrei uma maneira um pouco mais simples. Comecei com esse método, mas percebi que não funcionava com ddmmyyyy ao contrário de mmddyyyy . De alguma forma, não percebi que havia um número de estilo de data apropriado para mm/dd/yyyy . Então, basta adicionar duas barras à string de entrada e chamar CONVERT funciona, mas apenas se você usar 103 como o "estilo". E como a primeira solução, requer a alteração do parâmetro de entrada para VARCHAR(10) ou CHAR(10) em vez de VARCHAR(8) , ou criando uma variável local para ser 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

Os "estilos" de conversão podem ser encontrados na página do MSDN para CAST and CONVERT .