vasco16 Posted November 3, 2009 at 02:48 PM Report Share #294498 Posted November 3, 2009 at 02:48 PM 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 More sharing options...
fLaSh_PT Posted November 3, 2009 at 03:03 PM Report Share #294502 Posted November 3, 2009 at 03:03 PM 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 More sharing options...
Gooden Posted November 3, 2009 at 03:09 PM Report Share #294506 Posted November 3, 2009 at 03:09 PM 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. Link to comment Share on other sites More sharing options...
ribeiro55 Posted November 3, 2009 at 03:11 PM Report Share #294507 Posted November 3, 2009 at 03:11 PM 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" Link to comment Share on other sites More sharing options...
Gooden Posted November 3, 2009 at 03:24 PM Report Share #294509 Posted November 3, 2009 at 03:24 PM 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 👍 deste vez ganhaste xD Link to comment Share on other sites More sharing options...
vasco16 Posted November 3, 2009 at 03:37 PM Author Report Share #294510 Posted November 3, 2009 at 03:37 PM 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 More sharing options...
apocsantos Posted November 3, 2009 at 04:00 PM Report Share #294512 Posted November 3, 2009 at 04:00 PM 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 More sharing options...
vasco16 Posted November 3, 2009 at 04:19 PM Author Report Share #294513 Posted November 3, 2009 at 04:19 PM 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.. Link to comment Share on other sites More sharing options...
apocsantos Posted November 3, 2009 at 04:35 PM Report Share #294515 Posted November 3, 2009 at 04:35 PM 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 More sharing options...
vasco16 Posted November 3, 2009 at 09:57 PM Author Report Share #294591 Posted November 3, 2009 at 09:57 PM 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 More sharing options...
apocsantos Posted November 3, 2009 at 10:25 PM Report Share #294597 Posted November 3, 2009 at 10:25 PM 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 More sharing options...
fLaSh_PT Posted November 3, 2009 at 11:58 PM Report Share #294621 Posted November 3, 2009 at 11:58 PM 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 More sharing options...
vasco16 Posted November 4, 2009 at 04:12 PM Author Report Share #294700 Posted November 4, 2009 at 04:12 PM 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 More sharing options...
vasco16 Posted November 7, 2009 at 01:42 PM Author Report Share #295034 Posted November 7, 2009 at 01:42 PM 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 More sharing options...
FreiNando Posted November 7, 2009 at 04:16 PM Report Share #295045 Posted November 7, 2009 at 04:16 PM 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 More sharing options...
vasco16 Posted November 7, 2009 at 06:10 PM Author Report Share #295053 Posted November 7, 2009 at 06:10 PM 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 More sharing options...
FreiNando Posted November 7, 2009 at 07:18 PM Report Share #295060 Posted November 7, 2009 at 07:18 PM 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 More sharing options...
vasco16 Posted November 7, 2009 at 07:25 PM Author Report Share #295061 Posted November 7, 2009 at 07:25 PM 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 More sharing options...
vasco16 Posted November 25, 2009 at 10:46 PM Author Report Share #297583 Posted November 25, 2009 at 10:46 PM mais alguma sugestão? Link to comment Share on other sites More sharing options...
rotpdt Posted June 21, 2010 at 02:28 PM Report Share #335232 Posted June 21, 2010 at 02:28 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now