• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vasco16

Condição SQL

20 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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).

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora