Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
É o seguinte pessoal, tenho duas datas um inicial e uma final. Eu quero listar somente os meses que fazem parte do intervalo das datas por exemplo:
dataini = cdate("01/05/2014")
datafinal = cdate("01/03/2015")
For i = dataini To datafinal
'aqui quero listar somente os meses
response.write month(i)
Next
Quando fiz o for acima, o resultado restornado foi a sequencia de meses para cada dia do mes, por exemplo: 5555555555,666666,7777.....
Então como eu faria pra listar somente os meses sem repetição: 5, 6, 7, 8, 9, 10, 11, 12....
Amigo obrigado pela ajuda, eu consegui fazer da seguinte forma também.
dataini = cdate("01/05/2014")
datafinal = cdate("01/03/2015")
qtdmeses = 10
For i = 0 To qtdmeses-1
dataparcela = DateAdd("m", i, dataini)
mesparcela = month(dataparcela)
Next
>
Amigo obrigado pela ajuda, eu consegui fazer da seguinte forma também.
dataini = cdate("01/05/2014")
datafinal = cdate("01/03/2015")
qtdmeses = 10
For i = 0 To qtdmeses-1
dataparcela = DateAdd("m", i, dataini)
mesparcela = month(dataparcela)
Next
Fagner sei que o topico é antigo mas ve se vc pode me ajudar,
preciso fazer a pesquisa entre datas data inicial 01/06/2014 data final 30/06/2014, e que seja exibido eventos entre as datas so que meu banco so me retorna resultado "valido" quando pesquiso com a data mm/dd/aaaa
Exe:.
06/01/2014 até 06/30/2014.
Sabe o que posso fazer para resolver???
EsTa assim porque o padrão americano é mês / dia / ano no seu caso faça uma função que inverta as datas... quando lançar dia / mês / ano quando passar na SQL ficara mês / dia / ano
formata a data antes.
session.lcid=1046
function formatadata(data)
dia=day(data)
mes =month(data)
ano=year(data)
formatadata=dia&"/"&mes&"/"&ano
end function
SQL1 = "INSERT INTO NEWSLETTER (NewsletterNome,NewsletterEmail,NewsletterData,NewsletterHora,NewsletterIP,FL
G_EMAIL) VALUES ('"&Nome&"','"&Email&"',#"&formatadata(NewsletterData)&"#,'"&NewsletterHora&"','"&NewsletterIP&"','"&NewsletterFLG&"')"
Formato: aaaa-mm-dd
<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Year(ConDataBanco) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2)
ConverterDataBanco = ConDataBanco
End Function
Response.Write(ConverterDataBanco(Date()))
%>
Formato: dd-mm-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function
Response.Write(ConverterDataBanco(Date()))
%>
Formato: mm-dd-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2) &"-"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function
Response.Write(ConverterDataBanco(Date()))
%>
Formato: mm/dd/aaaa
<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Month(ConDataBanco),2) &"/"& Right("0"&Day(ConDataBanco),2) &"/"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function
Response.Write(ConverterDataBanco(Date()))
%>
session.lcid=1046
function formatadata(data)
dia=day(data)
mes =month(data)
ano=year(data)
formatadata=dia&"/"&mes&"/"&ano
end function
SQL1 = "INSERT INTO NEWSLETTER (NewsletterNome,NewsletterEmail,NewsletterData,NewsletterHora,NewsletterIP,FL
G_EMAIL) VALUES ('"&Nome&"','"&Email&"',#"&formatadata(NewsletterData)&"#,'"&NewsletterHora&"','"&NewsletterIP&"','"&NewsletterFLG&"')"
<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function
Response.Write(ConverterDataBanco(Date()))
%>
xanburzum coloco assim no meu asp antes de recolher a data inicial e data final do meu site?
desculpe a burrice mas sou mt leigo se poder colocar mais na pratica ainda agradeço as variaveis que criei que recolhe os dados sao
datai (datainicial)
dataf (datafim).
EsTa assim porque o padrão americano é mês / dia / ano no seu caso faça uma função que inverta as datas... quando lançar dia / mês / ano quando passar na SQL ficara mês / dia / ano
gustavo sabe me falar como fazer isso?? eu uso asp puro com banco de dados em access.
no banco o campo esta como data ?
esta como data/hora lembrando que uso access como banco de dados
Se o xan não tentasse explicar tanto ficaria mais simples DETALHE: o lcid não resolve isso
Na construção sql desde vc colocar a função formatadata coloque a ConverterDataBanco
Se ainda não souber onde ... é lá string da sql1 entre as #
Isso serve para as instruções de insert into e update
Sucesso!
>
Se o xan não tentasse explicar tanto ficaria mais simples DETALHE: o lcid não resolve isso
Na construção sql desde você colocar a função formatadata coloque a ConverterDataBanco
Se ainda não souber onde ... é lá string da sql1 entre as #
Isso serve para as instruções de insert into e update
Sucesso!
Gustavo desculpe ocupar seu tempo sou leigo e sei que é chato explicar para quem nao entende muito, mas se poder colocar na pratica e explicar agradeço assim aprendo e repasso o aprendizado.
Meu codigo sql hoje:
var_datai = request.form("datai")
var_dataf = request.form("dataf")
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #"&var_datai&"# and #"&var_dataf&"#"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
quando eu listo uma consulta simples de toda linha do banco mostra a data correta so no resultado dessa pesquisa que nao.
Vamos lá... na execução sql a mesma é interpretada em inglês com base nesse princípio as datas no inglês é mês /dia / ano e em português é dia /mês / ano devido esse problema você deve aplicar uma função que troque de lugar o dia com o mês veja a mesma abaixo
Function invertedata(data)
d = day(cdate(data))
m = month(cdate(data))
a = year(cdate(data))
invertedata = m &"/"& d & "/" & a
End function
Depois do request das variaveis coloque
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
faz igual no post#6 e abaixo do code tem outras funções para formatar. Mas faça como no exemplo e vc pode usar o between direto na SQL, até melhor
<%
session.lcid=1046
Function formatadata(data)
dia=day(Data)
Mes=month(Data)
ano=year(Data)
formatadata=ano&"/"&mes&"/"&dia
End Function
e na SQL faz assim:
"SELECT distinct produtos FROM linhas WHERE fim BETWEEN '"&formatadata(date)&"' AND '"&formatadata(DateAdd("m",6,Date))&"'
"SELECT order_id, shopper_id, date_entered, total, status FROM store_receipt
WHERE date_entered BETWEEN '" & strData1 & "' AND '" & strData2 & "' ORDER BY date_entered DESC"
depois pode até usar o DateAdd, DateDiff etc tudo na SQL, tipo
WHERE date_entered BETWEEN '" & strData1 & "' AND '" & DateAdd("d",1,strData2) & "' ORDER BY date_entered DESC"
So não esquece de colocar as tralhas pois é um campo data só se fosse PostgreSQL que apóstrofos na SQL :innocent:
existem vários exemplos que coloquei no fórum usando datas em vários bds, SQL Server, POstgre, MySQL pode ajudar
Em Rafael como você esta usando access as datas além de ser no formato mês/dia/ano elas precisam estar entre tralhas # só isso o esquema é ir aprendendo aos poucos tudo de uma vez fica complicado... desta vez vc aprendeu sobre as datas... porem te aconselho a estudar outros bancos trabalhar na internet com access não é aconselhável
Em Rafael como você esta usando access as datas além de ser no formato mês/dia/ano elas precisam estar entre tralhas # só isso o esquema é ir aprendendo aos poucos tudo de uma vez fica complicado... desta vez você aprendeu sobre as datas... porem te aconselho a estudar outros bancos trabalhar na internet com access não é aconselhável
è gustavo percebi mesmo, alem do mais tem mt mais gente que conhece o sql. é pq estou no meio desse meu site quero deixar ele funcional pq poderia fazer os testes com outros bancos com calma sem tirar ele do ar diretamente.
vou fazer o teste agora e posto aqui como ficou
So não esquece de colocar as tralhas pois é um campo data só se fosse PostgreSQL que apóstrofos na SQL :innocent:
Gustavo tentei como vc falou criei a função para converter a data e depois de pegar as datas com o request.form fiz o comando para conversao var_datai = invertedata(var_datai) e o mesmo com o dataf.
ae me retorna o seguinte erro
Microsoft JET Database Engine erro '80040e07'
Erro de sintaxe na data na expressão de consulta 'DATA between ## and ##'.
tentei dar um response.write(var_datai) e response.write(var_dataf) mas nao me mostra os valores que ficou melhor nao me mostra nda a pagina em branco apenas.
teste assim cole a função invertedata na mesma página!!! eu poderia de falar para colar numa outra e fazer o include mas vamos passo-a-passo!! NÃO INDICO A CHAMA A FUNÇÃO DE INVERTEDATA DE FORMATADATA por que formatar tem pode se tratar de máscaras de campo mas não é regra!!
var_datai = request.form("datai")
var_dataf = request.form("dataf")
response.write "antes de trocar " & var_datai & " - " & var_dataf & "<br>"
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
response.write "depois de trocado " & var_datai & " - " & var_dataf & "<br>"
response.end 'até aqui para ver o resultado!! se ver os dados normais e invertidos remova o response.end
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #" & var_datai & "# and #" & var_dataf & "#"
response.write "<br>" & vSql
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
if myRst.eof and myRst.bof then
response.write "<br>Não tem registros entre essas datas!!"
else
while not myRst.eof
response.write "<br>" & myRst(0) ' pode ser assim também myRst("NOMEDOCAMPO") o zero é o indice do select
myRst.movenext
wend
end if
'teste ai!!
'sucesso!
>
teste assim cole a função invertedata na mesma página!!! eu poderia de falar para colar numa outra e fazer o include mas vamos passo-a-passo!! NÃO INDICO A CHAMA A FUNÇÃO DE INVERTEDATA DE FORMATADATA por que formatar tem pode se tratar de máscaras de campo mas não é regra!!
var_datai = request.form("datai")
var_dataf = request.form("dataf")
response.write "antes de trocar " & var_datai & " - " & var_dataf & "<br>"
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
response.write "depois de trocado " & var_datai & " - " & var_dataf & "<br>"
response.end 'até aqui para ver o resultado!! se ver os dados normais e invertidos remova o response.end
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE DATA between #" & var_datai & "# and #" & var_dataf & "#"
response.write "<br>" & vSql
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
if myRst.eof and myRst.bof then
response.write "<br>Não tem registros entre essas datas!!"
else
while not myRst.eof
response.write "<br>" & myRst(0) ' pode ser assim também myRst("NOMEDOCAMPO") o zero é o indice do select
myRst.movenext
wend
end if
'teste ai!!
'sucesso!
Gustavo mais uma vez obrigado por estar me ajudando fiz como vc falou, criei uma pagina asp so com essas informações, no primeiro response.write retornou a msg de erro que esta esperando para fechar (acho ke ta faltnado aspas duplas) mas entendi o que vc quer fazer e fiz manual mesmo segue o codigo.
var_datai = request.form("datai")
var_dataf = request.form("dataf")
response.write (var_datai)
response.write (var_dataf)
Function invertedata(data)
d = day(cdate(data))
m = month(cdate(data))
a = year(cdate(data))
invertdata = m & "/"& d & "/" & a
end function
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
response.write (var_datai)
response.write (var_dataf)
response.write "to aqui"
response.end()
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE data between "&var_datai&" and "&var_dataf&""
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
me retornou a data antes da conversao no formato dd/mm/aaaa igual coloquei no form, depois de aplicar a função invertedata e aplicar o response.write nao volta dado nenhum, ae tirei o response.end ae da a msg que falei:
Microsoft JET Database Engine erro '80040e07'
Erro de sintaxe na data na expressão de consulta 'DATA between ## and ##'.
haja paciencia com novatos né
Calma é assim mesmo... faltou a tralha...
Veja como tem que estar...
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE data between #"&var_datai&"# and #"&var_dataf&"#"
Teste ai...
>
Calma é assim mesmo... faltou a tralha...
Veja como tem que estar...
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE data between #"&var_datai&"# and #"&var_dataf&"#"
Teste ai...
meu codigo sql
vSql = "select * from tab_atualizar_brasfels where data between #"&var_datai&"# and #"&var_dataf&"#"
set myrst = server.createObject("ADODB.Recordset")
myRst.Open vSql, conn, 3,3
resposta do servidor:
Microsoft JET Database Engine erro '80040e07'
Erro de sintaxe na data na expressão de consulta 'data between ## and ##'.
gustavo tem algo haver o fato do segundo response.write nao exibir nada depois de aplicada a função invertedata??
var_datai = request.form("datai")
var_dataf = request.form("dataf")
Function invertedata(data)
d = day(cdate(data))
m = month(cdate(data))
a = year(cdate(data))
invertdata = m & "/"& d & "/" & a
end function
var_datai = invertedata(var_datai)
var_dataf = invertedata(var_dataf)
Amigo, você deve estar fazendo a consulta com a data no formato errado, tenta colocar essa função na data quando faz a consulta SQL:
Function FdataMysql(Data)
If Data <> "" Then
dia = day(data)
if dia < 10 then
dia = "0"&dia
end if
mes = month(data)
if mes < 10 then
mes = "0"&mes
end if
FdataMysql = year(data)&"-"&mes&"-"&dia
End if
End Function
na instrução SQL faz assim:
vSql = "select * from tab_atualizar_brasfels where data between #"&FdataMysql(var_datai)&"# and #"&FdataMysql(var_dataf)&"#"
é isso mesmo Fagner estou tentando passar para ela esse esquema mas eu acho que agora vai!!
é isso ai!!
>
Calma é assim mesmo... faltou a tralha...
Veja como tem que estar...
vSql = "SELECT * FROM TAB_ATUALIZAR_BRASFELS WHERE data between #"&var_datai&"# and #"&var_dataf&"#"
Teste ai...
Gustavo agora deu certo!!! sabe onde estava o erro na função invertedata e invertdata em cima estava com a letra "e" e embaixo nao estava ou seja nao estava aplicando a função!!
agora mais uma perguntas:
a pesquisa so da exata qnd coloco no formato d/d/aaaa se eu colocar dd/mm/aaaa da errado nao lista tds
>
é isso mesmo Fagner estou tentando passar para ela esse esquema mas eu acho que agora vai!!
é isso ai!!
Gustavo foi mal perdi um dia da sua atualização escrevi o post so nao cliquei em responder, rsrs
mas como vc bem falou deu certo so cai naquela situação que descrevi acima se eu pesquisar com d/m/aaaa(1/7/2014) fica perfeito mas se eu pesquisar com dd/mm/aaaa(01/07/2014) nao lista todos os campos.
Mas de qualquer maneira mt obrigado a todos pelo o que já aprendi com vocês, sei que é bem mais trabalhoso colocar a solução e explicar mas explicando vc ensina e com isso posso repassar o conhecimento e nao so copiar ecolar a resposta.
estranho pois é só uma formatação 01/07/2014 não faz diferença com 1/7/2014 mas verifique com o isdate assim
var_datai = request.form("datai")
var_dataf = request.form("dataf")
if isdate(var_datai) = false or isdate(var_dataf) = false then
response.write "O parametro da data inicial ou a data final não foi identificado como data!"
response.end
end if
boa observação copiar e colar pode até resolver mas é paleativa pois não aprende por que quando aprendemos tudo a frente fica mais fácil!! é assim mesmo!!
sucesso!
Dentro do for
If month(i) = MesAtual
Else
Response.write month(i)
MesAtual = month(i)
End if
Não testei, mas é por ai.