Fernandinha Postado Abril 9, 2009 Denunciar Share Postado Abril 9, 2009 Bom dia pessoal.Estou com um problema para converter um campo no SQL Server 2005.O campo tem o valor de 09012909012, onde o mesmo representa AAMMDDHHMMe o mesmo é do tipo char(11).Gostaria de converter esse campo para pegar os 40 últimos dias, para isso teria que convertê-lo em data.O select que eu queria fazer para isso acontecer seria mais ou menos assim, embora o mesmo não está correto porque deu erro.SELECT * FROM TabelaAWHERE DT_HH_ATUALIZACAO = (CONVERT (DATETIME, DT_HH_ATUALIZACAO,120)-40)Mas na hora da execução o seguinte erro é exibido:Msg 241, Level 16, State 1, Line 2Conversion failed when converting datetime from character string.Alguém poderia me ajudar por favor???Desde já muito obrigada.Fernanda Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Abril 15, 2009 Denunciar Share Postado Abril 15, 2009 fernanda, acho q o 120 não vai converter esse formato. e tb não achei uma forma de converter o seu formato.se você puder muda-lo, de uma olhada nas formas de converte-lo aqui: http://msdn.microsoft.com/en-us/library/ms187928.aspxde uma olhada na primera tabela. a segunda coluna dela mostra o q você deve passar no tercero parametro do convert (no lugar do 120) pra cada formato.mas acho q tb ficaria mais facil você usar substring pra dividir a data. tipo assim:SELECT * FROM TabelaAWHERE DT_HH_ATUALIZACAO = (convert(datetime,substring(DT_HH_ATUALIZACAO, 1, 4) + '-' + substring(DT_HH_ATUALIZACAO, 5, 2) + '-' +substring(DT_HH_ATUALIZACAO, 7, 2) + ' ' + substring(DT_HH_ATUALIZACAO, 9, 2) + ':' +substring(DT_HH_ATUALIZACAO, 11, 2), 120)) - 40[/code]bom, esse select deve fazer a conversao correta, entretanto acho q não vai selecionar nd, porque uma data não vai ser igual a ela mesma menos 40 ne.ai não entendi o q você quis dizer com "pegar os 40 últimos dias", se não conseguir fazer o select, explique melhor essa parte. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CAIO.EXE Postado Abril 19, 2009 Denunciar Share Postado Abril 19, 2009 oi Fernandinha!já tive q fazer coisa parecida,no seu caso, como você quer pegar 40 dias atras não é interessante, ao meu ver, pegar as horas e minutos,por tanto use a função LEFT para pegar só os 6 primeiros numeros(yymmdd)e o formato q você precisa colocar é o 12 ou 112 não o 120a função completa seria essa:convert(datetime,left('0901020920',6),112)a data q eu coloquei foi 02/01/2009 09:20 - ('0901020920')eu tirei as horas left('0901020920',6)e o valor q ele me retornou foi 2009-01-02 00:00:00.000mas se precisa msmo da hora ai fica mais complicado...não há um formato padrão no sql como o q você precisaestou faazendo uns testes akise encontrar alguma solução facil eu entro em contatoatt.Caio Cardoso Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Fernandinha
Bom dia pessoal.
Estou com um problema para converter um campo no SQL Server 2005.
O campo tem o valor de 09012909012, onde o mesmo representa AAMMDDHHMM
e o mesmo é do tipo char(11).
Gostaria de converter esse campo para pegar os 40 últimos dias, para isso teria que convertê-lo em data.
O select que eu queria fazer para isso acontecer seria mais ou menos assim, embora o mesmo não está correto porque deu erro.
SELECT * FROM TabelaA
WHERE DT_HH_ATUALIZACAO = (CONVERT (DATETIME, DT_HH_ATUALIZACAO,120)-40)
Mas na hora da execução o seguinte erro é exibido:
Msg 241, Level 16, State 1, Line 2
Conversion failed when converting datetime from character string.
Alguém poderia me ajudar por favor???
Desde já muito obrigada.
Fernanda
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.