Jump to content

Between SQL


cmd
 Share

Recommended Posts

Boas a todos,

Estou a tentar recolher os dados de uma BD SQL entre as datas (exemplo) 01-01-2012 e 02-01-2012 e estou a utilizar o BETWEEN.

O problema é que ele retorna-me todas as datas entre 01 e 02 e ignora-me os restantes numeros.

Como posso resolver?

O campo data está como texto e não posso alterar a estrutura :s

Cumps.cmd

Link to comment
Share on other sites

Se o campo é texto, não podes esperar milagres.

Tens de fazer casts para data, mas é uma solução à lavrador...

Para além disso, SQL usam todas, à partida. Especifica por favor.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Ui.

Experimenta com o CDate.

Algo como:

SELECT bla bla bla FROM tabela WHERE CDate(a_tal_data) BETWEEN CDate(a_data_inicio) AND CDate(a_data_fim)

Partindo do início que a data em texto está num formato que o CDate agarre. Isso já não te sei dizer porque não uso MSAccess assim tanto (leia-se nada)

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Calcula ano*13*32 + mes*32 + dia para os tres valores relevantes.

Depois faz o BETWEEN com base nesses calculos

select ... where ... CALCULO1 between CALCULO2 and CALCULO3 ...

Melhor ainda era alterar a base de dados ... ah ... espera ... pois 😉

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Calcula ano*13*32 + mes*32 + dia para os tres valores relevantes.

Depois faz o BETWEEN com base nesses calculos

select ... where ... CALCULO1 between CALCULO2 and CALCULO3 ...

Melhor ainda era alterar a base de dados ... ah ... espera ... pois 😉

Não estou a perceber esses cálculos.

Podias-me explicar melhor sff?

Cumps.cmd

Link to comment
Share on other sites

Os calculos vao originar numeros sequenciais (com buracos) de acordo com as datas.

Por exemplo para 29 de Fevereiro de 2012

2012*32*13 + 2*32 + 29 = 837085

1 de Marco de 2012

2012*32*13 + 3*32 + 1 = 837089

Como ves, 29 de fevereiro foi antes de 1 marco, e o calculo correspondente foi inferior ao de 1 de Marco 😉

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Os calculos vao originar numeros sequenciais (com buracos) de acordo com as datas.

Por exemplo para 29 de Fevereiro de 2012

2012*32*13 + 2*32 + 29 = 837085

1 de Marco de 2012

2012*32*13 + 3*32 + 1 = 837089

Já percebi!

Mas o formato da data na BD está, por exemplo, assim: 02-03-2012.

Como vou conseguir fazer o between como os valores provenientes dos cálculos?

Cumps.cmd

Link to comment
Share on other sites

Mas o formato da data na BD está, por exemplo, assim: 02-03-2012.

Isolar partes dum texto, transformar essas partes em numeros ja nao sei fazer (em Access) ... mas nao me parece muito dificil.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Bem lembrado!

Outra forma de fazer isso é simplesmente juntar os três elementos.

Isto produz igualmente números que se podem comparar normalmente.

2012-02-29 = 20120229

2012-03-01 = 20120301

20120229 < 20120301

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

SELECT bla bla bla FROM tabela WHERE REPLACE(a_tal_data,'-','') BETWEEN REPLACE(data_inicio,'-','') AND REPLACE(data_fim,'-','')

Que talvez não funcione a menos que transformes os resultados dos replace em numero, com VAL() ou coisa parecida.

VAL(REPLACE(data_inicio,'-',''))

talvez... experimenta.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

sqlselect = "SELECT movimentacaoapara.ID, movimentacaoapara.data, movimentacaoapara.codfornecedor, movimentacaoapara.transportenr, movimentacaoapara.faturanr, movimentacaoapara.tipo, movimentacaoapara.pesoinicial, movimentacaoapara.pesolaboratorioI, movimentacaoapara.pesolaboratorioF, movimentacaoapara.humidade, movimentacaoapara.desconto, movimentacaoapara.pesofaturado, movimentacaoapara.preco, movimentacaoapara.valorfatura FROM movimentacaoapara WHERE codfornecedor='" & cbb_forns.Text & "' AND REPLACE(data,'-','') BETWEEN '" & datain & "' AND '" & datafim & "'  ORDER BY ID DESC"

Cumps.cmd

Link to comment
Share on other sites

Deveria ser:

" AND VAL(REPLACE(data,'-','')) BETWEEN " & datain & " AND " & datafim & "  ORDER BY ID DESC"

Pressupondo que datain e datafim já se encontram no formato AAAAMMDD, sem hifens.

Mas de acordo com o erro anterior, o problema parece-me outro.

Alguém com mais experiência Access te dirá porque é que o replace não está a funcionar.

Podes deixar, entretanto, qual é a versão do Access.

Outra coisa, se só tens uma tabela no FROM, não precisas de a especificar em todas as colunas do Select...

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Deveria ser:

" AND VAL(REPLACE(data,'-','')) BETWEEN " & datain & " AND " & datafim & "  ORDER BY ID DESC"

Pressupondo que datain e datafim já se encontram no formato AAAAMMDD, sem hifens.

Mas de acordo com o erro anterior, o problema parece-me outro.

Alguém com mais experiência Access te dirá porque é que o replace não está a funcionar.

Podes deixar, entretanto, qual é a versão do Access.

Outra coisa, se só tens uma tabela no FROM, não precisas de a especificar em todas as colunas do Select...

Continua-me a dar o mesmo erro.

O access é o 2010.

Cumps.cmd

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.