Fórum Campo Data definido com Varchar #175137
15/08/2003
0
Primeiramente gostaria de parabenizá-los pelo excelente conteúdo.
Há muito tempo utilizo este grupo(como expectador não-registrado), e nele solucionei praticamente todas as dúvidas que tive em relação às ferramentas que uso.
Bom, meu problema é o seguinte:
Tenho uma tabela (vendas) que possui dentre os campos existentes, um campo Data_Venda definido como Varchar (10).
As datas neste campo já estão gravadas no formato DD/MM/YYYY.
Quando tento fazer uma pesquisa SQL, passo como parâmetro uma string neste formato. Porém, o resultado não é o esperado.
Se tento usar a função CAST, ela me retorna erro na conversão.
Exemplo:
Select * from vendas where data_venda between ´01/01/2001´ and ´01/01/2005´.
A consulta acima me retorna Vazio, a não ser que alguma data_venda seja dia 01 de qualquer mês em qualquer ano.
Pergunta:
- Há alguma forma direta de converter o que já está gravado no banco para o formato (mm/dd/yyyy) sem perder dados.?
- Ou há alguma comando ou configuração no Interbase que deixe eu colocar o formato desejado? Assim supostamente o cast funcionaria!
Desde já agradeço e me despeço.
Um forte abraço para todos,
Brunowolly
Curtir tópico
+ 0Post mais votado
15/08/2003
Você já tentou assim?:
Select * from vendas where Cast(data_venda as Date) Between ´01/01/2001´ and ´01/01/2005´
Voce poderia selecionar uma faixa de datas usando >= inicio and <= fim, mas no formato que foi armazenado haverá falhas na seleção, deveria estar yyyymmdd para funcionar corretamente.
A saida mais adequada na minha opinião é realmente criar uma nova coluna com tipo DATA e atualizar o banco. No entanto, é preciso avaliar o impacto disto em sua aplicação, pois poderá gerar muito retrabalho.
Para atualizar a base com SQL seria assim:
UPDATE VENDAS SET VEN_DATA = Cast(data_venda as Date)
Mas ainda acho que deveria tentar experimentar o select com cast apresentado inicialmente.
Aroldo Zanela
Gostei + 1
Mais Posts
15/08/2003
Diogoalles
Sugiro pra voce que converta este campo varchar para data .. porque dessa maneira você perde, e não tem, nenhuma funcionalidade com ele. Como por exemplo psquisar por intervalo de Data.
Crie um novo campo nesta tabela e através de um programinha que vc pode fazer me Delphi mesmo converta esta data em varchar para o novo campo do tipo Data.
você pode inserir um componente table em um form e um button,no evento onclick do button coloque:
Table.Open;
Table.First;
While not (Table.Eof)do
Begin
Table.Edit;
Table.fieldbyname(´Data_Nova´).AsDate := StrToDate(Table.fieldbyname(´Data_Nova´).AsString);
Table.Post;
Table.Next;
end;
se entendi sua questão espero ter ajudado.
abraço
Diogo
Gostei + 0
15/08/2003
Brunowolly
Você já tentou assim?:
Select * from vendas where Cast(data_venda as Date) Between ´01/01/2001´ and ´01/01/2005´
Voce poderia selecionar uma faixa de datas usando >= inicio and <= fim, mas no formato que foi armazenado haverá falhas na seleção, deveria estar yyyymmdd para funcionar corretamente.
A saida mais adequada na minha opinião é realmente criar uma nova coluna com tipo DATA e atualizar o banco. No entanto, é preciso avaliar o impacto disto em sua aplicação, pois poderá gerar muito retrabalho.
Para atualizar a base com SQL seria assim:
UPDATE VENDAS SET VEN_DATA = Cast(data_venda as Date)
Mas ainda acho que deveria tentar experimentar o select com cast apresentado inicialmente.[/quote:63f38837db]
----------------------
Mais uma vez só tenho a agradecer!
Farei a conversão de Varchar p/ Date, parece + trabalhoso, porém, pelo que pude notar, é a forma + correta e limpa de consertar o erro.
Muito Obrigado Aroldo Zanela!
Gostei + 0
15/08/2003
Brunowolly
Valeu Diogo,
Criarei um novo campo e farei a conversão de Varchar p/ Date.
Obrigado pela atenção!
Abraços!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)