Jump to content
vasco16

Condição SQL

Recommended Posts

vasco16

Boas pessoal é assim numa aplicação estou a inserir registos com a data do sistema:

Dim agora As Date = DateTime.Now

e para depois mostrar os meus dados estou a pedir assim:

        Dim comandosql = " * from bd1 where (DATA < '" & (DateAdd(DateInterval.Hour, -2160, Date.Today)) & "')"

só que o programa não me está a avaliar bem.. o meu objectivo é mostrar as datas que ja estam na BD ha mais de 3 meses.. o que estou a fazer mal?

Share this post


Link to post
Share on other sites
fLaSh_PT

Utiliza a syntax BETWEEN, que é o ideal para filtrar dados entre valores..

Vê se consegues perceber..

Dim comandosql As String = _
"SELECT columns " & _
"FROM tables " & _
"WHERE column1 BETWEEN '" & DateAdd(DateInterval.Month, -3, DateTime.Now).ToString("yyyy-MM-dd HH:mm:ss") & "' and '" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") & "'"

OBS:

-"yyyy-MM-dd HH:mm:ss" formata a data para o formato do SQL

-No -3, colocas o tempo que queres em meses..

-Para mais info. sobre o BETWEEN visita: http://www.techonthenet.com/sql/between.php

Compr.


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
Gooden

Aconselho-te a formatares a data para 20090319 23:59:59 ou seja YYYYmmDD HH:mm:ss

Isto porque em certas linguagem na configurações do sql, esta é universal.

Share this post


Link to post
Share on other sites
ribeiro55

Mais "universal" que isso ainda é trabalhares com DateTime e enviares o valor através de um SQL parameter.


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"

Share this post


Link to post
Share on other sites
Gooden

Mais "universal" que isso ainda é trabalhares com DateTime e enviares o valor através de um SQL parameter.

tinha que ser -.-" Geek xD

Mas sim tens razão prontos :thumbsup: deste vez ganhaste xD

Share this post


Link to post
Share on other sites
vasco16

Utiliza a syntax BETWEEN, que é o ideal para filtrar dados entre valores..

Vê se consegues perceber..

Dim comandosql As String = _
"SELECT columns " & _
"FROM tables " & _
"WHERE column1 BETWEEN '" & DateAdd(DateInterval.Month, -3, DateTime.Now).ToString("yyyy-MM-dd HH:mm:ss") & "' and '" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") & "'"

OBS:

-"yyyy-MM-dd HH:mm:ss" formata a data para o formato do SQL

-No -3, colocas o tempo que queres em meses..

-Para mais info. sobre o BETWEEN visita: http://www.techonthenet.com/sql/between.php

Compr.

mas essa syntax BETWEEN nao me vai apresentar os dados entre um intervalo? :S

Por exemplo um registo que seja inserido no dia 07-08-2009 é apresentado mas um registo que seja inserido no dia 09-10-2009 ja nao é apresentado.

Share this post


Link to post
Share on other sites
apocsantos

A sintax pelo que li mostra-te os dados que estejam no intervalo, no caso o intervalo é de month -3 ou seja vai ao valor numerico de mês e retira o valor 3.

Talvez fosse boa ideia explicares se queres literalmente 3 meses, ou 90 dias (3 meses de 30 dias).


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
vasco16

A sintax pelo que li mostra-te os dados que estejam no intervalo, no caso o intervalo é de month -3 ou seja vai ao valor numerico de mês e retira o valor 3.

Talvez fosse boa ideia explicares se queres literalmente 3 meses, ou 90 dias (3 meses de 30 dias).

APenas 90 dias, sejam eles 2160 horas, ou 3 meses..

Share this post


Link to post
Share on other sites
apocsantos

Em teoria seria isto:

    
Dim comandosql As String = _
"SELECT columns " & _
"FROM tables " & _
"WHERE column1 BETWEEN '" & DateAdd(DateInterval.DayOfYear, -90, DateTime.Now).ToString("yyyy-MM-dd HH:mm:ss") & "' and '" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") & "'"

Não testei não te posso garantir que funcione, mas basicamente tens que extrair 90 dias ao dia do "ano" para ele te recuar 90 dias literalmente.

Cumprimentos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
vasco16

Em teoria seria isto:

    
Dim comandosql As String = _
"SELECT columns " & _
"FROM tables " & _
"WHERE column1 BETWEEN '" & DateAdd(DateInterval.DayOfYear, -90, DateTime.Now).ToString("yyyy-MM-dd HH:mm:ss") & "' and '" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") & "'"

Não testei não te posso garantir que funcione, mas basicamente tens que extrair 90 dias ao dia do "ano" para ele te recuar 90 dias literalmente.

Cumprimentos

Continua a não me apresentar dados:S

Share this post


Link to post
Share on other sites
apocsantos

Qual o motor de base de dados que estás a usar??

A mim aconteceu-me semelhante com datetime pickers mas era com MySql, com MS-SQL já não acontecia, se puderes indica que motor de bd estás a utilizar.


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
fLaSh_PT

Mais "universal" que isso ainda é trabalhares com DateTime e enviares o valor através de um SQL parameter.

Sim, e melhor seria também utilizar o DateAdd do próprio SQL.. isto porque as vezes as data/hora do PC onde corre a aplicação pode não estar correcta..

Ficaria com este aspecto:

DECLARE @datetime2 datetime2;
DECLARE @days int;
DECLARE @datetime datetime;
SET @days = -90;
SET @datetime = GETDATE(); 

SELECT columns FROM table WHERE column1 BETWEEN DATEADD(day, @days, @datetime) AND GETDATE();

Ou sem parameter..

SELECT columns FROM table WHERE column1 BETWEEN DATEADD(day, -90, GETDATE()) AND GETDATE();

@vasco16

Esta a renomear as colunas do query?

Compr.


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
vasco16

Sim, e melhor seria também utilizar o DateAdd do próprio SQL.. isto porque as vezes as data/hora do PC onde corre a aplicação pode não estar correcta..

Ficaria com este aspecto:

DECLARE @datetime2 datetime2;
DECLARE @days int;
DECLARE @datetime datetime;
SET @days = -90;
SET @datetime = GETDATE(); 

SELECT columns FROM table WHERE column1 BETWEEN DATEADD(day, @days, @datetime) AND GETDATE();

Ou sem parameter..

SELECT columns FROM table WHERE column1 BETWEEN DATEADD(day, -90, GETDATE()) AND GETDATE();

@vasco16

Esta a renomear as colunas do query?

Compr.

Sim estou a renomear e estou a interligar (ou usar SQL) com uma Bd em access..

Share this post


Link to post
Share on other sites
vasco16

Pessoal cheguei a várias conclusões:

1ª se a isntrução for a seguinte:

"Select * from bd1"

Aparecem-me todos os registos da minha BD dos meses agosto setembro outubro e novembro;

2ª Se a minha condição for esta:

"Select * from bd1 where DATA > '" & (DateAdd(DateInterval.Hour, 2610, DateTime.Now).ToString("yyyy-MM-dd HH:mm:ss")) & "'""

Aparece-me todos os registos dos meses agosto setembro e outubro os de novembro nao aparecem..

3ª Se a minha condição for esta:

"Select * from bd1 where DATA > '" & (DateAdd(DateInterval.Hour, 2610, DateTime.Now))"

Só me aparece o mes de outubro;

Objectivo:

Avaliar se a data está na Bd ha mais de 3 meses..

Share this post


Link to post
Share on other sites
FreiNando

Caso use o DAO para ler a bae de dados do Access,

deves ter em conta que o DAO aceita o modelo Internacional("yyyy-MM-dd")  e o Modelo Americano ("MM-dd-yyyy") e que deves em SQL  colocá-la entre cardinais.

  Ex.:

 "SELECT * FROM db1 WHERE Data>" &  DateAdd(DateInterval.Month, -3, Now).ToString("#yyyy-MM-dd#")

Espero que vá ajudar


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
vasco16

Caso use o DAO para ler a bae de dados do Access,

deves ter em conta que o DAO aceita o modelo Internacional("yyyy-MM-dd")  e o Modelo Americano ("MM-dd-yyyy") e que deves em SQL  colocá-la entre cardinais.

  Ex.:

 "SELECT * FROM db1 WHERE Data>" &  DateAdd(DateInterval.Month, -3, Now).ToString("#yyyy-MM-dd#")

Espero que vá ajudar

SIm ajuda mas ainda nao resolve o problema.. será que me estou a esquecer de alguma coisa ? :S

Share this post


Link to post
Share on other sites
FreiNando

Desculpa eu não ter reparado que pretendias saber as datas com mais de 3 meses, ou seja anteriores a uma data de à 3 meses atrás.

Basta mudar o sinal '>' para '<' e apenas sairá na consulta os registos com data anterior à data de referencia(3 meses atrás).

O exemplo que eu dei, lista as que têm menos de três meses.


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
vasco16

Desculpa eu não ter reparado que pretendias saber as datas com mais de 3 meses, ou seja anteriores a uma data de à 3 meses atrás.

Basta mudar o sinal '>' para '<' e apenas sairá na consulta os registos com data anterior à data de referencia(3 meses atrás).

O exemplo que eu dei, lista as que têm menos de três meses.

assim nao me aparece nenhum registo.. eu acho que como tinhas dito está bem, a data da BD tem de ser maior que a data a calcular (data de hoje menos 3 meses (ou 90 dias)) se for maior é apresentado o registo caso contrario nao o mostra .

Share this post


Link to post
Share on other sites
rotpdt

Galera, como posso fazer com essas funções para mim estipular um filtro para 15 últimos registros no banco de dados... Eu utilizo o bd mysql qual seria a instrução adequada para usar pois estou tentando essas q foram informadas em mensagens anteriores e ñ deu certo. Obrigado.

SELECT dataagenda FROM bdados WHERE dataagenda > & DateAdd(DateInterval.Day, 15, Now).ToString("#yyyy-MM-dd#")

Alguma ajuda. No aguardo.

Share this post


Link to post
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

×
×
  • 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.