Fórum Duvida com essa SQL - Ajuda #56991
02/10/2006
0
select * from CADRESUMOFAT where data between ´06/2006´ and ´08/2006´
o resultado dela era pra ser
Correto? Porém está trazendo dados do ano de 2005, 2004... onde está o erro? tentei fazer por filtro (direto na table) mas trouxe a mesma coisa.
Tentei tbm dessa forma
select * from CADRESUMOFAT where data >= ´06/2006´ and data <= ´08/2006´
e o resultado foi o mesmo... Alguem tem a solução? Por favor!!
Estou usando D7 + Firebird, esse campo data é do tipo STRING no formato Mes(2 digitos) /Ano (4 Digitos)
Facc
Curtir tópico
+ 0Posts
02/10/2006
Campsoft
Eu não manjo muito de sql, mais pelo pouco que conheço, os operadores >= e <= funcionam a contento para campos numericos.
Não sei se existe a possibilidade de você desmembrar essa string em outros dois campos numericos [XX]/[YYYY] eu acho que lhe facilitaria muito a vida.
Um grande abraço !
Gostei + 0
02/10/2006
Campsoft
select * from base where date like ´¬/2006´ and data like ´04/¬´
(meio tosco, mais na gambi funcionaria) hehe...
Gostei + 0
03/10/2006
Facc
Sim eu tentei usar o LIKE mas ele traz apenas os dois registros (06/2006 e 08/2006) e não essa ´faixa´ que eu preciso
Gostei + 0
03/10/2006
Macario
Usar campo char ou varchar para armazenar uma suposta data nao e uma boa opcao.
Em casos onde preciso como referencia apenas o mes e ano, eu utilizo um campo datetime normalmente, apenas na hora do cadastro eu sempre gravo a data como sendo 01/domes/doano. Assim na hora de efetuar pesquisas nao tenho problemas
Gostei + 0
03/10/2006
Steve_narancic
select * from CADRESUMOFAT where extract(month from data) between 06 and 08 and extract(year from data) = 2006
Gostei + 0
03/10/2006
Vinicius/campolina
procedure Tfrmcracha.BitBtn6Click(Sender: TObject);
var
Inicio : string;
Final : string;
soma : extended;
begin
Soma := 0;
Inicio := edit7.Text ;
Final := edit8.text;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Text := ´SELECT naocobrar, totais, data FROM cracha WHERE (data between :pinicio and :pfinal) order by data ASC´;
adoquery1.Parameters.ParamByName(´pinicio´).Value := StrToDate(Inicio);
adoquery1.Parameters.ParamByName(´pfinal´).Value := StrToDate(final);
adoquery1.Open;
end;
end;
Dessa forma voce jogaria uma data inicial e uma final nos edits,
ele te retorna somente as datas que tiverem entre os edits.
Espero ter ajudado.
Gostei + 0
03/10/2006
Vinicius/campolina
Voce não precisará dela.
Ok.
Gostei + 0
03/10/2006
Facc
Gostei + 0
03/10/2006
Steve_narancic
Gostei + 0
03/10/2006
Macario
Eu compreendi sua necessidade.
Trabalhar com datas em campos char/varchar e inoportunuo. Acarreta diversos problemas(tipo de separador de data, formato da data.;
Lhe disse que passei por situacao parecida e a solucao que encontrei foi converter o campo para datetime. Ai sempre que preciso inserir um MES/ANO, eu incluo como sendo o primeiro dia do MES/ANO por exemplo;
Desta forma posso trabalhar com pesquisas normalmente em cima do campo.
Creio que esta e a solucao mais pratica.
Gostei + 0
03/10/2006
Facc
é não vejo outra alternativa...
Então... como posso fazer pra converter esse campo, mas mantendo os dados da tabela? é que eu tenho vários clientes trabalhando com o sistema no momento...
Gostei + 0
03/10/2006
Macario
1º - Verificar necessidade em aumentar a capacidade do campo, se char(07) para char(10) ou se varchar(07) para varcahr(10), pois dos dados existentes exemplo 08/2006 devera ser alterado para 01/08/2006
2º - Verificar todos os relacionamentos envolvendo o CAMPO. tanto para consulta quanto para edicao.
3º - Efetuar um Update na(s) tabela(s) relacionada(s).
Exemplo:
Update TABELA set CAMPO = ´01/´+CAMPO
Obs.: Faca isso em um ambiente de teste e posteriormente aplique em producao.
[]´s
Gostei + 0
03/10/2006
Facc
Update TABELA set CAMPO = ´01/´+CAMPO
eu fiz o que vc me disse, porém está dando esse erro no update
Gostei + 0
03/10/2006
Macario
Qual o tipo do campo?(atualmente).
Gostei + 0
03/10/2006
Marco Salles
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)