Ir para conteúdo
Fórum Script Brasil
  • 0

Conversão de dados


Fernandinha

Pergunta

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

  • 0

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.aspx

de 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 TabelaA
WHERE 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 120

a 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.000

mas se precisa msmo da hora ai fica mais complicado...

não há um formato padrão no sql como o q você precisa

estou faazendo uns testes aki

se encontrar alguma solução facil eu entro em contato

att.

Caio Cardoso

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...