Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dayse Teixeira

Converter e Alterar na Base campos char para datetime

Recommended Posts

Olá pessoal! Gostaria de uma ajuda. Tenho uma base em formato txt. Esta base foi importada para o SQL Server e todos os dados como tipo char.Porém, preciso converter e alterar na base alguns campos do tipo data para datetime, pois tenho que pegar o CPF do cliente e a data mais recente do campo movimentação, e para fazer o max com a data, tenho que converte-lá primeiro.Aguardo respostas!Muito obrigada.De

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Dayse,

 

Datas geralmente apresentam problemas devido a regionalizações, ainda mais qdo. gravadas em formato string.

 

imaginando q o seu formato de data em string esteja em portugues (dd/MM/yyyy), o caminho é setar o sql pra trabalhar neste formato set dateformat dmy, tentar converter pra datetime e depois ter fé, muita fé...rsrsrs

 

simple exemplo, convertendo a data de 16-08-2005 (16 de agosto de 2005):

set dateformat dmy
declare @data varchar(10)
set @data = '16/08/2005'
select @data, convert(datetime, @data)

 

neste exemplo retorna 2005-08-12 (12 de agosto de 2005) o sql mostra sempre no formato yyyy/MM/dd (a não ser que se converta no select), mas se naum fizer a conversão de data para dmy, ou seja, deixar em mdy ou ymd a o sql retorna 2005-12-08 (8 de dezembro de 2005), inverte o mes com o dia, com isso em alguns casos ocorre o erro 242 (The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.), por exemplo 16-08-2005 se for inverter o mes e dia naum existe mês 16

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez a query da seguinte forme e obtive o erro 242. Tem alguma coisa errada?SELECT F1.CPF, F1.NOME_CLIENTE, F1.POSTO, F1.DT_ABERT, F1.SITUACAO,FROM TABELA AS F1WHERE SITUACAO = 2AND CPF IN (SELECT LTRIM(RTRIM(CPF)) FROM TABELA GROUP BY CPF) AND DT_ABERT IN (SELECT MAX(CONVERT(DATETIME, DT_ABERT)) FROM TABELA GROUP BY CPF)SET DATEFORMAT DMYObrigada pela força!!Dayse

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dayse ,o SET DATEFORMAT DMY vai antes do selectdetalhe: o campo DT_ABERT é do tipo DateTime? se naum for vai ter q converter ele tb.caso ocorrer erro testa só o select q esta fazendo na condição IN pra ver o que está retornando, se der erro, so pra testar tb. tenta mudar pra set dateformat mdy ou entaum set dateformat ymdt++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode me mostrar em que parte da query devo converter o campo DT_ABERT? Ele também é char.

é no where, qdo. ele ta fazendo o INAND CONVERT(DATETIME,DT_ABERT) IN (SELECT MAX(CONVERT(DATETIME, DT_ABERT)) FROM TABELA GROUP BY CPF)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua com o erro 242. Existe alguma outra alternativa.

Você pode me mostrar em que parte da query devo converter o campo DT_ABERT? Ele também é char.

é no where, qdo. ele ta fazendo o INAND CONVERT(DATETIME,DT_ABERT) IN (SELECT MAX(CONVERT(DATETIME, DT_ABERT)) FROM TABELA GROUP BY CPF)

Compartilhar este post


Link para o post
Compartilhar em outros sites

data é f@#d$@ msm... tenta fazer só o select com esses campos convertendo pra ver o que te retorna

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva!!!Achei qual é o problema.Fiz a query com o convert e ele deu o erro 242, mas mostrou o número total de linhas que já havia feito.Daí fiz um select pra me mostrar a data do registro com problema e olha só o resultado:01/01/1001O tipo smalldatetime é de 1 de janeiro de 1900 até 6 de junho de 2079 e o datetime é de 1 de janeiro de 1753 até 31 de Dezembro de 9999.Então ele não vai conseguir converter!Alguma idéia do que posso fazer????Mais uma vez, muito obrigada pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.