Ir para o conteúdo
vasco16

Condição SQL

Mensagens Recomendadas

vasco16    0
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?

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

Partilhar esta mensagem


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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade