Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

interlokk

Problema com comparação de datas

Recommended Posts

Fala galera...Tô com um probleminha aqui e gostaria de requisitar uma mãozinha de vcs. O enrosco é com datas. Vamos lá.

 

Entre todas as datas do BD (no formato mm/dd/aaaa hh:mm:ss) quero mostrar apenas as datas da semana. Aê peguei um código aqui mesmo no fórum e dei uma adaptada.

 

semana=weekday(now())semfrente=7-Cint(semana)inicio = dateadd("d",Cint(-semana),now()) ' inicio da semana dd/mm/aaaa hh:mm:ssfim = dateadd("d",Cint(semfrente),now())  ' fim da semana dd/mm/aaaa hh:mm:ss              Set Conexao = Server.CreateObject("ADODB.Connection")             Conexao.Open db             Set rs = server.createobject("adodb.recordset")             rs.open "Select * From TAbela WHERE data > "&inicio&" AND data <= "&fim&" ORDER BY data"do while rs.eofresponse.write rs.(“data”)movenext.rsloop

mas sempre que esse script roda dá uma mensagem dizendo que há um erro de sintaxe no SQL.

 

Se eu substituo

 

inicio = dateadd("d",Cint(-semana),now())fim = dateadd("d",Cint(semfrente),now())

 

por

 

inicio = day(dateadd("d",Cint(-semana),now()))fim = day(dateadd("d",Cint(semfrente),now()))  

roda legal mas aê só compara os dias. O problema parece que é o modo que o SQL ta lendo o campo “data”. Alguém saberia como contornar essa nháca? Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na instrução SQL use as funções Day(campo), Month(campo) e Year(campo) para comparar seus valores...falows

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara qual eh o db??tente assimWHERE data > #"&inicio&"# AND data <= #"&fim&"# ORDER BY data"colocando as datas entre #

Compartilhar este post


Link para o post
Compartilhar em outros sites

O banco é MySQL. Quando eu uso a sugestão do rOcKLoCo aparece a menagem abaixo:

 

[MySQL][ODBC 3.51 Driver][mysqld-4.0.20-standard-log]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(date), month(date), year(date) > 23/04/2005 13:24:49 AND day(d

..e quando eu uso a sugestão do marioufpa:

 

[MySQL][ODBC 3.51 Driver][mysqld-4.0.20-standard-log]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

você teria q fazer assim

 

ASP

[*]"select * from tabela where Day(campo_data) = "&Day(Date)&" and Month(campo_data) = "&Month(Date)&" and Year(campo_data) = "&Year(Date)&""

Compartilhar este post


Link para o post
Compartilhar em outros sites

q gambi hein, tio! :D http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

ahauhauahuahesse kdu não presta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você teria q fazer assim

 

ASP

[*]"select * from tabela where Day(campo_data) = "&Day(Date)&" and Month(campo_data) = "&Month(Date)&" and Year(campo_data) = "&Year(Date)&""

<{POST_SNAPBACK}>

q gambi hein, tio! :D

 

http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

<{POST_SNAPBACK}>

hahahaha pra quem pode.. não pra quem quer... hahaha

Compartilhar este post


Link para o post
Compartilhar em outros sites

f*** esa dica do Kdu...eu ia morrer sem saber disso...deu certo em parte pois agora só compara o dia...p. ex. se a semana vai de 23/04/2005 15:32:49 até 30/04/2005 15:32:49 ele incui o dia 27/12/2004 16:56:47 ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifica se a data não tem que ta no formato mm/dd/aaaa

Compartilhar este post


Link para o post
Compartilhar em outros sites

As datas estão no bd no formato dd/mm/aaaa vou ver se alterando para mm/dd/aaaa dá certo. O SQL execuntando agora é esse:Select * From Board_Messages WHERE date BETWEEN '"&inicio&"' AND '"&fim&"' ORDER BY datequanto a dúvida sobre as horas me parece que a função insere as horas atuais ao inves da hora estática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ASP

[*]

 

[*] hoje date()

 

[*] dia_semana WeekDay(hoje)

 

[*] primeiro_dia_semana = hoje - dia_semana + 1

 

[*] ultimo_dia_semana = primeiro_dia_semana + 6

 

[*] primeiro_dia_semana = primeiro_dia_semana & " 00:00:00"

 

[*] ultimo_dia_semana = ultimo_dia_semana & " 23:59:59"

 

[*] sql "SELECT * FROM tabela WHERE data BETWEEN '"&primeiro_dia_semana&"' AND '"&ultimo_dia_semana&"'"

 

[*]

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa alteração proposta pelo ska ska faz com que a semana comece em 24/04/2005 00:00:00 e termine em 30/04/2005 23:59:59. Mas o erro parece estar na forma que o BD lê o campo data. Ele não retorna nada mesmo tendo datas dentro da semana...mas se eu colocar a data no formato dd/mm/aaaa ele reconhece. Teria como fazer essa função do ska ska retornasse uma data no formato mm/dd/aaaa??

Compartilhar este post


Link para o post
Compartilhar em outros sites

ASP

[*]

 

[*]Function FormataData(datax)

 

[*]'---função q vai deixar a data no formato MM/DD/AAAA

 

[*]  tdata FormatDateTime(datax, 2)

 

[*]  ano year(tdata)

 

[*]  mes month(tdata)

 

[*]  dia day(tdata)

 

[*]  if len(mes) =1 then mes = 0&mes

 

[*]  if len(dia) =1 then dia = 0&dia

 

[*]  tdata = mes & "/" & dia & "/" & ano

 

[*]  FormataData = tdata

 

[*]End Function

 

[*]

 

[*]hoje date()

 

[*]dia_semana WeekDay(hoje)

 

[*]primeiro_dia_semana = hoje - dia_semana + 1

 

[*]ultimo_dia_semana = primeiro_dia_semana + 6

 

[*]primeiro_dia_semana FormataData(primeiro_dia_semana) & " 00:00:00"

 

[*]ultimo_dia_semana FormataData(ultimo_dia_semana) & " 23:59:59"

 

[*]sql "SELECT * FROM tabela WHERE data BETWEEN '"&primeiro_dia_semana&"' AND '"&ultimo_dia_semana&"'"

 

[*]response.write sql

 

[*]

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom gente desculpa a demora em postar...é que num abri o forum hoje....com relação a sugestão do ska ska de uma forma ou de outra o script só tá comparando os dias (certa altura eu até achei que ia da certo...) num importa se a data tá dd/mm/aaaa ou mm/dd/aaaa...bom quanto a solicitação do kdu ai vai:Select * From Board_Messages WHERE date BETWEEN '24/04/2005 00:00:00' AND '30/04/2005 23:59:59' ORDER BY dateisso é o response.write do sql....espero que isso ajude, senão vou sapear um código pronto no codigo livre...pq já encheu essa nháca...mas de qq forma vlw mesmo a força aê galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, galera tô ressuscitando este tópico só pra mostrar a solução do problema. Depois de muito fuçar nisso e ter quase desistido euresolvi a questão com uma gambiarra.

 

Peguei a dica do ska_ska e do kdu e fiz umas adaptações. Como a função só tava comparando o dia, não considerando o mês e como a SQL num aceitava os parametros day, month, year, etc, pra eu comparar eu pedi a SQL pra juntar todas as datas definidas pelos parametros inicio e fim (da semana atual). Depois com um IF eu isolei o mês de interesse e fiz com que só as datas com o mês atual aparecessem http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif . Isso é besteria pra muita gente aqui no fórum mas eu ralei pra resolver isso...Pra quem tiver a mesma dúvida aí vai o código funcionando. Pra quem quer fazer uma lista de aniversariantes da semana, p. ex., ele é bem legal:

 

hoje = date()    semana = WeekDay(hoje)    inicio = hoje - semana + 1    fim = inicio + 6    inicio = inicio & " 00:00:00"     fim = fim & " 23:59:59"	 set cDB = new DBClasscDB.Open sConnForumsSQL =  "Select * From Tabela WHERE date BETWEEN '"&inicio&"' AND '"&fim&"' ORDER BY date"set rs = cDB.GetRS(sSQL)response.write inicio & "<br>"print "<table width=""90%"" border=""0"">"print "<tr><td><strong>datas</strong><hr size=""1""></td>"do while not rs.eof	print "<tr>"	print "<td>"	if month(rs("Date")) = month(inicio) AND month(rs("Date")) = month(fim) then	print rs("Date") & "</td>"	else	'faz nada	end if	print "</tr>"	rs.movenextloopprint "</table><br><br>"response.write fim & "<br><br>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.