Jump to content

Condição SQL


vasco16
 Share

Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 .

Link to comment
Share on other sites

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.

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.